Return 来自解析对象查询回调的对象数据
Return object data from parse object query callback
我对 Java/android 编程还很陌生,我被困在 Parse.com 回调中。
有一个方法 (method1) 请求当前用户拥有的对象的 objectId。它通过调用另一个方法 (method2) 来实现这一点,该方法包含一个查询,该查询使用回调从数据浏览器中拉出一个对象。
我设法编写了所有代码,但我卡在方法 2 的回调中。我希望将对象数据 returned 到方法 1,但这似乎是不可能的,因为回调类型(空白)。
我现在也知道如何让方法的其余部分在执行之前等待回调到 return。如果有人能帮助我,我将不胜感激。
这是我的代码:
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();
}
}
});
因此,在 iOS 或 Android 中使用 Parse 无法实现您尝试执行的操作。我认为它可能会按照您希望的方式在 .NET 上运行(使用 Await 关键字)。
相反,问问自己:
- 为什么要以这种方式构建您的 class?
- 为什么 return 值对原始方法很重要?
- 仅仅是因为你想要一种可回收的方法吗?
- 是否因为您想在更有意义的方法上下文中处理值?
如果是这样,请尝试这样的操作:
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()
) 中处理 returned 结果,同时还可以尽可能多地重复使用查询方法像。此外,与@JimW 的回答相反,它不使用同步网络调用,这也让您有机会保持应用程序的 UI 响应。
我遇到了同样的问题,回调真的很烦人,好像它们是随机触发的,而且 return 类型的 void 使得 Overriding everything neccessary。我通过使用不带回调的常规 .find() 解决了您的问题。然后我使用自定义代码完成了所有繁重的工作。
我对 Java/android 编程还很陌生,我被困在 Parse.com 回调中。
有一个方法 (method1) 请求当前用户拥有的对象的 objectId。它通过调用另一个方法 (method2) 来实现这一点,该方法包含一个查询,该查询使用回调从数据浏览器中拉出一个对象。
我设法编写了所有代码,但我卡在方法 2 的回调中。我希望将对象数据 returned 到方法 1,但这似乎是不可能的,因为回调类型(空白)。
我现在也知道如何让方法的其余部分在执行之前等待回调到 return。如果有人能帮助我,我将不胜感激。
这是我的代码:
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();
}
}
});
因此,在 iOS 或 Android 中使用 Parse 无法实现您尝试执行的操作。我认为它可能会按照您希望的方式在 .NET 上运行(使用 Await 关键字)。
相反,问问自己:
- 为什么要以这种方式构建您的 class?
- 为什么 return 值对原始方法很重要?
- 仅仅是因为你想要一种可回收的方法吗?
- 是否因为您想在更有意义的方法上下文中处理值?
如果是这样,请尝试这样的操作:
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()
) 中处理 returned 结果,同时还可以尽可能多地重复使用查询方法像。此外,与@JimW 的回答相反,它不使用同步网络调用,这也让您有机会保持应用程序的 UI 响应。
我遇到了同样的问题,回调真的很烦人,好像它们是随机触发的,而且 return 类型的 void 使得 Overriding everything neccessary。我通过使用不带回调的常规 .find() 解决了您的问题。然后我使用自定义代码完成了所有繁重的工作。