如何在parse.com中获取插入行的objectId

时间:2014-08-07 04:37:19

标签: android parse-platform

好吧,我正在尝试在parse.com的表中添加一个新行并获取objectID。我不认为有任何方法会在插入行后立即返回ID。所以,我首先插入行并尝试使用where条件获取ID。但它不起作用 - 在查询获取ID时无法在表中找到行;它返回的null对象。但是如果我浏览表格,我可以看到表格中的行。

以下是代码。在这里,我使用两个方法一来插入另一个用于获取ID的新行。代码位于按钮的点击视图事件中。

public void clkLogin(View v)
 {
        String user = txtUser.getText().toString();
        String pas = txtPass.getText().toString();

        saveUserToCloud(user , pas);
        getCloudId(user , pas);
}

private void saveUserToCloud(String us,String ps)
{
    ParseObject testObject = new ParseObject("tblxxx");
        testObject.put("userName", us);
        testObject.put("password", ps);
    testObject.saveInBackground();
}


private void getCloudId(final String user,final String pasw)
 {
    Toast.makeText(this, user +"|" + pasw, 2000).show();

    ParseQuery<ParseObject> query = ParseQuery.getQuery("tblxxx");
      query.whereEqualTo("userName", user);
    query.getFirstInBackground(new GetCallback<ParseObject>() {
      public void done(ParseObject object, ParseException e)
      {
        if (object == null)
        {
            Log.d("scoren", "not found");
        } 
        else 
        {
            Log.d("scoren", "--found");
            String myIdInCLoud =  object.getObjectId().toString();
        }
      }
    });

}

它不起作用的可能原因是什么?另外,还有其他方式来获取ID吗?

4 个答案:

答案 0 :(得分:3)

将您的testObject.saveInBackground();替换为

testObject.saveInBackground(new SaveCallback()
{
    @Override
    public void done(ParseException e) {
       if(e==null){
           //saved successfully
           getCloudId(user , pas);
       }

    }
});

以上内容将确保您在Parse上保存行后只获取 objectId

希望这有效。 :)

答案 1 :(得分:0)

试试

object.id

而不是

object.getObjectId().toString{};

myObj.id将允许您检索对象ID

答案 2 :(得分:0)

如果您使用回调的saveInBackground()版本,您将获得包含新对象ID的对象的更新版本。

然后您可以将其保存在某个地方以便以后使用,或者根据需要在那里使用它。

另请注意,您当前运行的代码在两个“后台”操作之间存在竞争条件...如果由于任何原因saveInBackground()被延迟,getFirstInBackground()可能会运行并收集数据在它结束之前,返回意想不到的结果。

您经常需要了解异步代码的问题。

答案 3 :(得分:0)

您可以使用名为 done 的方法保存Object(在本例中为ID和pwd)并从parse中检索objectId。

private void saveUserToCloud(String us,String ps)
{
    ParseObject testObject = new ParseObject("tblxxx");
    testObject.put("userName", us);
    testObject.put("password", ps);
    testObject.saveInBackground(new SaveCallback() {
        public void done(ParseException e) {
            if (e == null) {
                // Success!
                String objectId = testObject.getObjectId();
            } else {
                // Failure!

            }
        });
        }
}

您可以使用以下方法检索对象列表

final ParseQuery<Object> query= new ParseQuery<>("abcd");
query.findInBackground(new FindCallback<Object>()
{
    @Override
    public void done ( final List<Object> listResult, ParseException e){
    if (e == null) {
        // listResult returns all Rows from TableName = "abcd"
    } 
    else {
        //failure
    }
}
});
}