2012-07-10 6 views
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"); 

    } 

} 
+0

누군가가 대답하고 질문을 한 후 15 분이 경과하면 답 옆의 체크 표시를 클릭하십시오. – Eric

답변

1

나는 onPostExecute()Void 매개 변수가 아닌 Void... 매개 변수를 사용한다 있기 때문에 생각합니다. (위의 설명에서 Soxxeh가 지적한대로 @Override도 지정해야합니다.)

관련 문제