Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从解析对象查询回调返回对象数据_Java_Android_Callback_Parse Platform - Fatal编程技术网

Java 从解析对象查询回调返回对象数据

Java 从解析对象查询回调返回对象数据,java,android,callback,parse-platform,Java,Android,Callback,Parse Platform,我对Java/android编程非常陌生,我被Parse.com回调卡住了 中有一个方法(method1),该方法请求当前用户拥有的对象的objectId。它通过调用另一个方法(method2)来实现这一点,该方法包含一个查询,该查询通过回调从数据浏览器中提取对象 我成功地编写了所有的代码,但是我被方法2的回调卡住了。我希望将对象数据返回到方法1,但由于回调类型(void),这似乎是不可能的 我现在也知道了如何让该方法的其余部分在执行之前等待回调返回。。如果有人能帮助我,我将不胜感激 这是我的代

我对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()解决了您的问题,没有回调。然后我使用自定义代码完成了所有繁重的工作。

    看起来这就是我要找的。现在需要睡一觉,但我一定会在明天的应用程序中深入研究并实现它。非常感谢!