我正在使用parse.com作为Android应用程序的后端。我有几个与“ inBackground”相关的功能需要连续发生,然后将结果发送回我的A​​ctivity(用于构建ListView)。我正在寻找一种“干净”的方法来做到这一点,例如编写一个带有从Activity中调用的方法的类。我不知道如何在外部类中做到这一点。以以下代码为例:

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”将导致此方法在“结果”设置为正确值之前返回。有什么解决方法?

最佳答案

如果要从函数中获取结果,则必须使用“同步”方法ParseQuery.find(...)而不是“异步” 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();

09-04 09:41