gpt4 book ai didi

java - AsyncTask onPostExecute 未从 doInBackground 返回结果

转载 作者:行者123 更新时间:2023-12-01 12:14:50 24 4
gpt4 key购买 nike

我正在尝试从 Parse 数据库加载我的应用程序的类别。我可以通过将 EditText View 设置为从数据库下载的 String ArrayList 的值来返回结果。但是当我在 doInBackground 方法中返回 ArrayList,并尝试在 onPostExecute 方法中将相同的 EditText 设置为结果时,它说索引超出范围并且 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,或者您对结果问题有解决方案吗?

提前致谢。

最佳答案

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

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

关于java - AsyncTask onPostExecute 未从 doInBackground 返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27082553/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com