AsyncTask onPostExecute不从doInBackground返回结果

时间:2014-11-22 21:05:50

标签: java android

我正在尝试从我的Parse数据库加载我的应用程序的类别。我可以通过将EditText视图设置为我从数据库下载的String ArrayList的值来返回结果。但是当我在doInBackground方法中返回ArrayList,并尝试将相同的EditText设置为onPostExecute方法中的结果时,它表示索引超出范围且ArrayList大小为0.这是我的代码:

private class DownloadCategories extends AsyncTask<Void, Void, ArrayList<String>> {
    protected ArrayList<String> doInBackground(Void... voi) {
        final ArrayList<String> load = new ArrayList<String>();
        ParseQuery<ParseObject> query = ParseQuery.getQuery("Categories");
        query.findInBackground(new FindCallback<ParseObject>() {
            @SuppressLint("NewApi")
            public void done(List<ParseObject> objects, ParseException e) {
                String category;
                if (e == null) {
                    for (int i = 0; i < objects.size(); i++) {
                        ParseObject pObject = objects.get(i);
                        category = pObject.getString("name");
                        load.add(category);

                    }
                    // onSucced(objects);
                } else {

                }
                //This is where i successfully can set the EditText to the first index.
                address.setText(load.get(0));
            }
        });
        return load;
    }

    protected void onPostExecute(ArrayList<String> loadedCats) {

        //This is where it gives me a null pointer error, since loadedCats is empty.
        address.setText(loadedCats.get(0));

    }

}

我是否应该使用类变量来访问onPostExecute方法中的变量,或者只是在下载类别后从doInBackground方法更新UI,或者您是否有结果问题的解决方案?

提前致谢。

1 个答案:

答案 0 :(得分:1)

您不需要父AsyncTask,您已经在使用findInBackground

导致此问题的原因是您在后台运行findInBackground,因此它的父AsyncTask不会等到done方法调用。相反,它返回空的ArrayList。之后调用done方法,因此它不会对列表产生任何影响。