Java 从解析对象查询回调返回对象数据
我对Java/android编程非常陌生,我被Parse.com回调卡住了 中有一个方法(method1),该方法请求当前用户拥有的对象的objectId。它通过调用另一个方法(method2)来实现这一点,该方法包含一个查询,该查询通过回调从数据浏览器中提取对象 我成功地编写了所有的代码,但是我被方法2的回调卡住了。我希望将对象数据返回到方法1,但由于回调类型(void),这似乎是不可能的 我现在也知道了如何让该方法的其余部分在执行之前等待回调返回。。如果有人能帮助我,我将不胜感激 这是我的代码:Java 从解析对象查询回调返回对象数据,java,android,callback,parse-platform,Java,Android,Callback,Parse Platform,我对Java/android编程非常陌生,我被Parse.com回调卡住了 中有一个方法(method1),该方法请求当前用户拥有的对象的objectId。它通过调用另一个方法(method2)来实现这一点,该方法包含一个查询,该查询通过回调从数据浏览器中提取对象 我成功地编写了所有的代码,但是我被方法2的回调卡住了。我希望将对象数据返回到方法1,但由于回调类型(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();
}
}
});
公共作废方法1(){
字符串objectId=null;
objectId=QueryStatisticObjectId(“年龄”);
Log.i(标记,“objectId返回到方法=“+objectId”);
}
公共字符串QueryStatisticObjectId(最终字符串统计){
ParseQuery=ParseQuery.getQuery(“统计”);
query.whereEqualTo(“user”,ParseUser.getCurrentUser());
查询:whereEqualTo(“统计”,statistic);
getFirstInBackground(新的GetCallback(){
@凌驾
公共无效完成(ParseObject对象,parsee异常){
如果(e==null){
//我们有数据!
字符串objectId=object.getObjectId();
返回;
}
其他的
{
//出问题了!?!
e、 printStackTrace();
}
}
});
因此,在iOS或Android中,使用Parse无法实现您的目标。我认为它可能会按照您在.NET上想要的方式工作(使用wait关键字)
相反,问问自己:
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);
}
公共作废方法1(){
QueryStatisticObjectId(“年龄”,新GetCallback(){
@凌驾
公共无效完成(ParseObject对象,parsee异常){
如果(e==null){
字符串objectId=object.getObjectId();
Log.i(标记,“objectId返回到方法=“+objectId”);
}否则{
Log.i(标记“未找到objectId”);
}
}
});
}
public void QueryStatisticObjectId(最终字符串统计,GetCallback){
ParseQuery=ParseQuery.getQuery(“统计”);
query.whereEqualTo(“user”,ParseUser.getCurrentUser());
查询:whereEqualTo(“统计”,statistic);
query.getFirstInBackground(回调);
}
通过这种方式,您可以编写代码来处理上下文中返回的结果(
method1()
)这是有道理的,同时尽可能多地重复使用查询方法。此外,与@JimW的回答不同,这没有利用同步网络调用,这也会让你有机会保持应用程序的UI响应。我也遇到了同样的问题,回调真的很烦人,似乎是随机触发的,而且返回类型为void使得覆盖所有内容都是必需的。我通过使用常规的.find()解决了您的问题,没有回调。然后我使用自定义代码完成了所有繁重的工作。看起来这就是我要找的。现在需要睡一觉,但我一定会在明天的应用程序中深入研究并实现它。非常感谢!