내 응용 프로그램의 카테고리를 Parse 데이터베이스에서로드하려고합니다. EditText 뷰를 데이터베이스에서 다운로드 한 String ArrayList 값으로 설정하여 결과를 반환 할 수 있습니다. 그러나 doInBackground 메서드에서 ArrayList를 반환하고 onPostExecute 메서드의 결과에 동일한 EditText를 설정하려고하면 인덱스가 범위를 벗어나 ArrayList 크기가 0이라고 표시됩니다.이 코드는 내 코드입니다.AsyncTask onPostExecute doInBackground에서 결과를 반환하지 않습니다.
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 메서드의 변수에 액세스하거나 범주를 다운로드 한 후 UI를 doInBackground 메서드에서 업데이트해야합니까? 아니면 결과에 대한 문제에 대한 해결책이 있습니까?
미리 감사드립니다.
물론 null을 반환해야합니다. 백그라운드 스레드에서 백그라운드 스레드를 호출하고 있습니다! –