其他分享
首页 > 其他分享> > Android:使用Parse时使用服务器端

Android:使用Parse时使用服务器端

作者:互联网

我和我的朋友正在开发一个应用程序,我们希望使用Parse.com作为我们的数据库,我们可以从中检索信息.
我们无法确定在Parse上访问数据的最佳方法是什么.为了这个例子,我们的应用程序. (即客户端)需要存储在Parse数据库中的东西(比如一些数字) – 如果它使用Parse API直接运行查询,或者它应该向服务器端发出请求,让它从Parse中检索该数字,并且把它发回给客户?

我们知道没有确切的答案,但我们无法找到有关这一具体情况的答案.我们读了这篇文章:When to use client-side or server-side?,
 但这不完全相同的情况.

我声称我们应该尝试尽可能地从客户端和数据库中分离,并让这些查询由负责人(服务器)运行,我的朋友声称这会增加不必要的复杂性,因为使用这些工具非常自然由Parse提供,从客户端访问数据库,无需协议等.

我们会批评任何建议,

谢谢.

解决方法:

一般情况下,请直接进行正常通话.

在任何情况下,我都鼓励你先做到这一点,让一切都在两端都有效.

然后,如有必要,请转到Cloud Code.

如果您打算使用多个平台(即iOS和Android),云代码可以节省大量时间.

但是不要忘记,对于简单的呼叫,云代码是浪费时间. “正常”Parse调用令人惊讶,令人难以置信,令人惊讶,快速且快速地使用.

使用普通的Parse调用绝对没有“错误” – 所以这样做.

关于这个问题,你什么时候必须使用云代码调用 – 你会知道,因为你无法通过正常的调用来实现它:)

不要忘记你经常可以在云代码中使用“afterSave”或“beforeSave”来做大量的工作.您通常不需要在云代码中进行“自定义调用”.

这真是太棒了

Parse云代码的经验法则———>

如果你必须做“不止一件事”……在这种情况下你可能不得不把它变成一个云代码功能.如果你必须做“三件或更多事情”,那么请务必将其作为云代码功能.

这是一个很好的经验法则.

(再说一次,正如我所说的,通常只是一个“afterSave”或类似作品才能出色地…而不是字面上写一个完整的自定义调用.)

这是一个典型的云调用示例,可​​以在互联网所涵盖的所有平台中节省180亿行代码.首先是云代码……

Parse.Cloud.define("clientRequestHandleInvite", function(request, response)
{
// called from the client, to accept an invite from invitorPerson

var thisUserObj = request.user;
var invitorPersonId = request.params.invitorPersonId;
var theMode = request.params.theMode;

// theMode is likely "accept" or "ignore"

console.log( "clientRequestAcceptInvite called....  invitorPersonId " + invitorPersonId + " By user: " + thisUserObj.id );
console.log( "clientRequestAcceptInvite called....  theMode is " + theMode );

if ( invitorPersonId == undefined || invitorPersonId == "" )
  {
  response.error("Problem in clientRequestAcceptInvite, 'invitorPersonId' missing or blank?");
  return;
  }

var query = new Parse.Query(Parse.User);
query.get(
  invitorPersonId,
    {
    success: function(theInvitorPersonObject)
      {
      console.log("clientRequestFriendRemove ... internal I got the userObj ...('no response' mode)");

      if ( theMode == "accept" )
        {
        createOneNewHaf( thisUserObj, theInvitorPersonObject );
        createOneNewHaf( theInvitorPersonObject, thisUserObj );
        }

      // in both cases "accept" or "ignore", delete the invite in question:
      // and on top of that you have to do it both ways

      deleteFromInvites( theInvitorPersonObject, thisUserObj );
      deleteFromInvites( thisUserObj, theInvitorPersonObject );

      // (those further functions exist in the cloud code)

      // for now we'll just go with the trick of LETTING THOSE RUN
      // so DO NOT this ........... response.success( "removal attempt underway" );
      // it's a huge problem with Parse that (so far, 2014) is poorly handled:
      // READ THIS:
      // parse.com/questions/can-i-use-a-cloud-code-function-within-another-cloud-code-function
      },
    error: function(object,error)
      {
      console.log("clientRequestAcceptInvite ... internal unusual failure: " + error.code + " " + error.message);
      response.error("Problem, internal problem?");
      return;
      }
    }
  );

}
);

如果您是Parse的新手,那么很难弄清楚如何从Android或iOS调用这些内容!这是从Android调用的那个…

这将为你节省一天与HashMaps搞乱:)

private static void handleInvite( ParseUser invitor, final boolean accepted )
    {
    String invitorId = invitor.getObjectId();
    // you must SEND IDs, NOT PARSEUSER OBJECTS to cloud code. Sucks!

    String cloudKode;
    cloudKode = (accepted? "accept" : "ignore");

    HashMap<String, Object> dict = new HashMap<String, Object>();
    dict.put( "invitorPersonId", invitorId );
    dict.put( "theMode", cloudKode );

    Toast.makeText(State.mainContext, "contacting...", Toast.LENGTH_SHORT).show();

    ParseCloud.callFunctionInBackground(
        "clientRequestHandleInvite",
         dict,
         new FunctionCallback<Object>()
    {
    @Override
    public void done(Object s, ParseException e)
        {
        Toast.makeText(State.mainContext, "blah", Toast.LENGTH_SHORT).show();
        // be careful with handling the exception on return...
        }
    });

    }

这是来自iOS的同一个云调用……现在好,直到你必须在SWIFT中完成

-(void)tableView:(UITableView *)tableView
        commitEditingStyle:(UITableViewCellEditingStyle)editingStyle
        forRowAtIndexPath:(NSIndexPath *)indexPath
    {
    int thisRow = indexPath.row;
    PFUser *delFriend = [self.theFriends objectAtIndex:thisRow];

    NSLog(@"you wish to delete .. %@", [delFriend fullName] );

    // note, this cloud call is happily is set and forget
    // there's no return either way. life's like that sometimes

    [PFCloud callFunctionInBackground:@"clientRequestFriendRemove"
            withParameters:@{
                            @"removeThisFriendId":delFriend.objectId
                            }
            block:^(NSString *serverResult, NSError *error)
            {
            if (!error)
                {
                NSLog(@"ok, Return (string) %@", serverResult);
                }
            }];

    [self back];    // that simple
    }

注意对于iOS / Swift体验,请单击:How to make this Parse.com cloud code call?,其中包括Parse.com团队的评论.希望它可以节省一些打字,欢呼

标签:parse-platform,android,database,client-side,server-side
来源: https://codeday.me/bug/20190928/1828789.html