我的query.findInBackground没有在android中执行

时间:2015-01-01 12:12:43

标签: android parse-platform

我在Android应用程序中使用解析我的数据。由于某种原因,query.findInBackground中的代码没有被执行。

public List<Date> sessionHeaderFetch(){
        Log.d("test", "session fetch entry");
        ParseQuery<Sessions> query = ParseQuery.getQuery(Sessions.class);
        final List<Date> sessionHeaders = null;
        query.findInBackground(new FindCallback<Sessions>() {
            @Override
            public void done(List<Sessions> sessionsObjects, com.parse.ParseException e) {
                Log.d("test", "session internal entry");
                if (e == null) {
                    Log.d("test", "Retrieved " + sessionsObjects.size() + " sessions");
                    for (Sessions session : sessionsObjects) {
                        sessionHeaders.add(session.getNetsDate());
                    };
                } else {
                    Log.d("score", "Error: " + e.getMessage());
                }
            }
        });
        Log.d("test", "session last value");
        return sessionHeaders;
    }

public void done()中的代码并未全部被调用。

3 个答案:

答案 0 :(得分:0)

我不认为你已经理解了如何在Parse中正确查询。

定义解析查询时。 get查询应包含您尝试查询的表的名称。返回的查询通常也是ParseObjects,所以我希望你的回调应该是新的FindCallback()。

我已经调整了下面的解析查询。

    ParseQuery<Sessions> query = ParseQuery.getQuery("ParseTableName");
    final List<Date> sessionHeaders = null;
    query.findInBackground(new FindCallback<ParseObject>() {
        @Override
        public void done(List<ParseObject> sessionsObjects, com.parse.ParseException e) {
            Log.d("test", "session internal entry");
            if (e == null) {
                // Find succeeded, so do something
            } else {
                Log.d("score", "Error: " + e.getMessage());
            }
        }
    });

显然你需要更换&#34; ParseTableName&#34;使用您尝试在解析时查询的表的名称。

答案 1 :(得分:0)

我实际上是通过使用ArrayList来解决它的,List初始化存在一些问题,结果也是以异步方式获取的,所以我调用这些函数的函数得到了空值,所以我不得不通过调用函数来调用也可以异步解析获取函数。

但查询可以像这样编写并且有效。

 public void sessionFetch(Date headers, final ParseIOListener<Sessions> listener){
        ParseQuery<Sessions> query = ParseQuery.getQuery(Sessions.class);
        Log.d("test", "input header" + headers );
        query.whereEqualTo("NetsDate",headers);
        final ArrayList<Sessions> sessionsData = new ArrayList<Sessions>();
        query.findInBackground(new FindCallback<Sessions>() {
            @Override
            public void done(List<Sessions> sessionsObjects, com.parse.ParseException e) {
                if (e == null) {
                    for (Sessions session : sessionsObjects) {
                        Log.d("test", "output objects" + session.toString() );
                        sessionsData.add(session);
                        Log.d("test", "Retrieved -- sessions" + sessionsObjects.size() );
                    }

                    listener.onDataRetrieved(sessionsData);
                } else {
                    listener.onDataRetrieveFail(e);
                }
            }
        });
    }

如果您想了解有关实施此问题的更多详情,请check this link

答案 2 :(得分:0)

您感觉未调用代码的原因是您在“.findInBackground”操作完成之前从方法返回。请记住,查询是在后台线程上执行的。这就是你的代码运行方式:

  1. ParseQuery query = ParseQuery.getQuery(Sessions.class);
  2. final list sessionHeaders = null;
    ------&GT; 1. query.findInBackground (弹出到后台线程)
  3. 返回sessionHeaders; (当您到达此处时,sessionHeaders可能仍为null)。
  4. 因此,在对“sessionHeaders”对象进行任何处理之前,请更改代码的逻辑并等待回调返回。