0
AsyncTask를 실행하는 앱을 작성했으며 코드의 일부가 다음과 같이 표시됩니다. 문제는 AsyncTask가 "new AddImageTask(). execute();"코드를 실행하여 시작하는 것입니다. 스레드 처리기에서 작업이 시작되고 모든 것이 제대로 된 것처럼 보입니다. 그러나 결국 "doInBackground"메소드의 모든 코드가 실행 된 후에 앱은 "doInBackground"메소드에 남아있게됩니다. 작업은 "onPostExecute"메서드로 갈 수 없습니다. (즉, 대화 상자를 닫을 수 없습니다 ...) 무엇이 잘못 되었습니까? 도움을android AsyncTask - onPostExecute 메서드를 실행할 수 없습니다.
덕분에 ......
private Handler handleFetchResult = new Handler() {
@Override
public void handleMessage(Message msg) {
progressDialog.dismiss();
Log.d(TAG, "Start handle fetch result");
try {
JSONArray ja = new JSONArray(fetchResult);
Log.d(TAG, "JSON Array Length = " + ja.length());
JSONObject jo = new JSONObject();
for (int i = 0; i < ja.length(); i++) {
jo = ja.getJSONObject(i);
PhotoURLs.add(PAT_url + jo.getString("filePath"));
Log.d(TAG, PhotoURLs.get(i));
}
} catch (JSONException e) {
Log.d(TAG, "Fetch result error: " + e.getLocalizedMessage());
e.printStackTrace();
}
//TODO: display thumbnail
new AddImageTask().execute();
}//void handleMessage
};//Handler handleFetchResult
class AddImageTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
loadThumbnailDialog.show(SitePhotoGallery.this, "Fetch thumbnails from server",
"Loading...", true, true);
Log.d("AddImageTask.onPreExecute","onPreExecute");
}
@Override
protected Void doInBackground(Void... unused) {
// TODO Auto-generated method stub
for (String url : PhotoURLs) {
String filename = url.substring(url.lastIndexOf("/") + 1, url.length());
String thumburl = url.substring(0, url.lastIndexOf("/")+1);
imgAdapter.addItem(LoadThumbnailFromURL(thumburl + filename));
publishProgress();
}
Log.d("AddImageTask.doInBackground","doInBackground");
return null ;
}
@Override
protected void onProgressUpdate(Void... unused) {
super.onProgressUpdate();
imgAdapter.notifyDataSetChanged();
Log.d("AddImageTask.onProgressUpdate","OnProgressUpdate");
}
protected void onPostExecute(Void... unused) {
super.onPostExecute(null);
loadThumbnailDialog.dismiss();
Log.d("AddImageTask.onPostExecute","onPostExecute");
}
}
누군가가 대답하고 질문을 한 후 15 분이 경과하면 답 옆의 체크 표시를 클릭하십시오. – Eric