好吧,我正在尝试在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吗?
答案 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
}
}
});
}