我遇到了在Parse中检索对象的问题。
我有一个子类"用户"这是扩展ParseUser类。
直到这里,一切都还好!
但是,我想要检索一个User对象,其中" objectId"等于:" movo1s5PcC"
所以,之前,我正在使用" query.whereEqualsTo(key,value)" 。
然后我开始使用" query.getInBackground(" value")" 。
但是,在这两种情况下,它都会出现同样的错误:
com.parse.ParseException:找不到查询结果
MainActivity.class - >的 imgur.com/nHEUzDe.png
// OnCreate
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
InstanceElements();
OnClickListeners();
String a = mUserRepository.GetUserObjectId(); // retrieves: "movo1s5PcC"
User b = mUserRepository.GetUser(a);
}
呼叫
UserRepository.class - >的 imgur.com/IX9pWko.png
public User GetUser(String objId) { // objId = "movo1s5PcC"
User response = this.User.getUser(objId);
return response;
}
呼叫
User.class - >的 i.imgur.com/Rao01OC.png
public User getUser(String objId) { // objId = "movo1s5PcC"
try {
ParseQuery<User> query = ParseQuery.getQuery("User");
query.getInBackground(objId);
User abc = query.getFirst();
return abc;
} catch (Exception e) { //Error: com.parse.ParseException: no results found for query
throw new UnsupportedOperationException();
}
}
Parse.com - 我在Parse的课程 http://i.imgur.com/oupIQfl.png
答案 0 :(得分:0)
您正在应用程序进程上调用getFirst,而Parse仍然在后台获取结果(在另一个进程上)。该错误意味着您要求null / empty对象的第一项。
您必须等待后台查询完成并在回调上调用getFirst。
当然,在尝试从中获取任何项目之前,应始终检查空值和空对象。
编辑: 这是你应该怎么做的: https://www.parse.com/docs/android/guide#queries
当您从服务器获得答案时,会调用“完成”功能。
当你这样做时:
1- query.getInBackground(objId);
2- User abc = query.getFirst();
您假设在第1行完成时将执行第2行,但这不是后台处理的工作方式。第2行将在服务器回答之前执行,“query”将为null或为空。
这就是为什么第2行和第2行的代码必须在回调函数“完成”上。 “完成”将在服务器响应时执行。