2015-01-01 22 views
0

我正在使用解析我的數據在android應用程序。出於某種原因,query.findInBackground中的代碼沒有得到執行。我的query.findInBackground沒有得到執行在android

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()中的代碼並未全部被調用。

回答

0

其實,我用一個ArrayList解決了這個問題,有一些問題列表初始化和的結果也與被獲取異步的方式,所以我的功能,它調用這些函數得到空值,所以我不得不通過調用函數調用寫解析獲取函數也是異步的。

但查詢可以寫成這樣,它的工作原理。

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

+0

什麼是使用parsequery的「Session」。 –

0

我不認爲你已經明白如何正確地解析查詢。

當您定義分析查詢。 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()); 
      } 
     } 
    }); 

很明顯,您需要將「ParseTableName」替換爲您在解析時嘗試查詢的表的名稱。

+0

它並不一定是這樣的,我們可以用ParseQuery.getQuery(Sessions.class);而Sessions是Parse對象的模型類,它將擴展ParseObject。感謝您的回答@Jaydev –

0

爲什麼你覺得沒有被調用的代碼是因爲你從方法中返回的「.findInBackground」操作完成前的原因。請記住,查詢是在後臺線程上執行的。因此,您的代碼將如何運行:

  1. ParseQuery query = ParseQuery.getQuery(Sessions.class);
  2. 最終列表sessionHeaders = NULL;
    ------> 1. query.findInBackground(探出到後臺線程)
  3. 返回sessionHeaders;(當你到達這裏,sessionHeaders可能仍然是空的)。

因此,在對「sessionHeaders」對象進行任何處理之前,更改代碼的邏輯並等待回調返回。