我正在尝试从我的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,或者您是否有结果问题的解决方案?
提前致谢。
答案 0 :(得分:1)
您不需要父AsyncTask
,您已经在使用findInBackground
。
导致此问题的原因是您在后台运行findInBackground
,因此它的父AsyncTask
不会等到done
方法调用。相反,它返回空的ArrayList。之后调用done
方法,因此它不会对列表产生任何影响。