我对Java / android编程很陌生,而且我被困在Parse.com回调中。
有一个方法(method1),它请求当前用户拥有的对象的objectId。它通过调用另一个方法(method2)来实现这一点,该方法包含一个查询,该查询通过回调从数据浏览器中提取对象。
我设法编写了所有代码,但我仍然坚持使用方法2的回调。我希望将对象数据返回给方法1,但由于Callback类型(void),这似乎是不可能的。
我现在也知道如何让方法的其余部分等待回调在执行之前返回..如果有人能帮助我,我将不胜感激。
这是我的代码:
public void method1(){
String objectId = null;
objectId = QueryStatisticObjectId("Age");
Log.i(TAG, "objectId returned to method = " + objectId);
}
public String QueryStatisticObjectId(final String statistic){
ParseQuery<ParseObject> query = ParseQuery.getQuery("Statistics");
query.whereEqualTo("user", ParseUser.getCurrentUser());
query.whereEqualTo("statistic", statistic);
query.getFirstInBackground(new GetCallback<ParseObject>() {
@Override
public void done(ParseObject object, ParseException e) {
if (e == null){
//We have data!
String objectId = object.getObjectId();
return;
}
else
{
//Something went wrong!?!
e.printStackTrace();
}
}
});
答案 0 :(得分:2)
因此,在iOS或Android中使用Parse无法实现您尝试做的事情。我认为它可能会以你想要的方式运行.NET(使用 Await 关键字)。
相反,问问自己:
如果是这样,请尝试以下方法:
public void method1() {
QueryStatisticObjectId("Age", new GetCallback<ParseObject>() {
@Override
public void done(ParseObject object, ParseException e) {
if (e == null) {
String objectId = object.getObjectId();
Log.i(TAG, "objectId returned to method = " + objectId);
} else {
Log.i(TAG, "objectId not found");
}
}
});
}
public void QueryStatisticObjectId(final String statistic, GetCallback<ParseObject> callback) {
ParseQuery<ParseObject> query = ParseQuery.getQuery("Statistics");
query.whereEqualTo("user", ParseUser.getCurrentUser());
query.whereEqualTo("statistic", statistic);
query.getFirstInBackground(callback);
}
通过这种方式,您可以编写代码来处理有意义的上下文(method1()
)中的返回结果,同时还可以根据需要重新使用查询方法。此外,与@ JimW的答案相反,这并不利用同步网络电话,这也使您有机会保持应用程序的用户界面响应。
答案 1 :(得分:0)
我遇到了同样的问题,回调真的很烦人,似乎它们随机发射,并且返回类型的void使得覆盖所有必要的东西。我通过使用常规.find()而没有回调来解决您的问题。然后我使用自定义代码完成了所有繁琐的工作。