2014-03-03 22 views
0

我正在使用parse.com作爲Android應用程序的後端。我有幾個需要連續發生的「inBackground」相關函數,然後將結果發送回我用來構建ListView的Activity。我要尋找一個「乾淨」的方式做到這一點,比如寫一個類的方法來從我的活動調用。我無法弄清楚如何在外部類做到這一點,雖然。看看下面的代碼,例如:在繼續執行代碼之前確保Parse已在背景操作中執行

List<ParseObject> list = ParseUtility.getList(); 

我們將定義的GetList(),就像這樣

private List<ParseObject> result; 

public List<ParseObejct> getList() { 
    ParseQuery<ParseObject> query = ParseQuery.getQuery(TABLE_NAME); 
    query.whereEqualTo(KEY, VALUE); 
    query.findInBackground(new FindCallback<ParseObject>() { 
     public void done(List<ParseObject> list, ParseException e) { 
      if (e == null) { 
       result = list; 
      } else { 
       result = null; 
      } 
     } 
    }); 
    return result; 
} 

我相信「findInBackground」將導致該方法對「結果」返回前被設置爲正確的價值。什麼是解決這個問題的方法?

+0

你試圖把return語句回調裏面?如果不是result = list,會發生什麼情況?您將返回列表(並返回null)...? – Moonwalkr

回答

1

如果你想從你的函數得到結果,你必須使用'synchronized'方法ParseQuery.find(...)而不是'asynchronous'ParseQuery.findInBackground(...)。然後調用從工作線程或服務,或的AsyncTask,等這個功能...

public static List<ParseObejct> getList() { 
    ParseQuery<ParseObject> query = ParseQuery.getQuery(TABLE_NAME); 
    query.whereEqualTo(KEY, VALUE); 
    result = query.find(); 
} 


new AsyncTask<Void, Void, List<ParseObject>>() { 

    @Override 
    protected List<ParseObject> doInBackground(Void... params) 
    { 
     return ParseUtility.getList(); 
    } 
}.execute(); 
相關問題