2014-09-09 3 views
0

URL을 다운로드하려면 내 앱에서 AsyncTask를 사용합니다. 기다리는 동안 onPreExecute()에 ProgressDialog를 사용합니다. 하지만 프로세스가 완료되는 동안 ProgressDialog를 볼 수 없으며 잠시 볼 수 있습니다. 그 후에 다운로드하는 동안 그것을보고 싶다. 누구든지 나를 도울 수 있습니다. 덕분에 내 코드는 다음과 같다 :AsyncTask가 백그라운드에서 실행되는 동안 ProgressDialog를 볼 수 없습니다.

private class loadMoreListView extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected void onPreExecute() { 
     // Showing progress dialog before sending http request 
     pDialog = new ProgressDialog(SingleMenuItemActivity.this); 
     pDialog.setMessage("Please Wait ..."); 
     pDialog.isIndeterminate(); 
     pDialog.setCancelable(false); 
     pDialog.show(); 
    } 

    protected Void doInBackground(Void... unused) { 
     runOnUiThread(new Runnable() { 
      public void run() { 

      // do something for downloading 

     } 
     }); 

     return (null); 
    } 


    protected void onPostExecute(Void unused) { 
     // closing progress dialog 
     pDialog.dismiss(); 
    } 
} 
+1

에게 doInBackground''의 * 전체 포인트 *입니다 사용할 수 있습니다 * NOT * UI 스레드에서 그것을합니다. 'runOnUiThread'는 필요한 경우 백그라운드 프로세스에서 UI를 업데이트하기위한 것입니다. –

답변

0

먼저 "AsoverTask 구현 된 모든 메서드에"@override "헤더가 첨부되어 있는지 확인합니다.

private class loadMoreListView extends AsyncTask<Void, Void, Void> { 

    ProgressDialog pDialog; 

    @Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 
     super.onPreExecute(); 
     pDialog = new ProgressDialog(SingleMenuItemActivity.this); 
     pDialog.setMessage("Please Wait ..."); 
     pDialog.isIndeterminate(); 
     pDialog.setCancelable(false); 
     pDialog.show(); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     // TODO Auto-generated method stub 

     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 
     pDialog.cancel(); 

    } 

} 

또한 UI에서 작업해야하는 경우가 아니면 doInBackground에서 제거하십시오.

runOnUiThread(new Runnable() { 
     public void run() { 

     // do something for downloading 

    } 
    }); 

runOnUiThread에서 다운로드 할 수없는 항목이 있습니다. doInBackground는 UI 등에서 볼 수없는 다운로드 등의 백그라운드 작업을 실행하기위한 것입니다.

+0

고맙습니다. 그것은 작동합니다! –

+0

나는 그것을 한 것이 기쁘다 – user3144836

1
runOnUiThread(new Runnable() { 
      public void run() { 
      // do something for downloading 
     } 

// runOnUiThread 내에서, 잘못, 다운로드 뭔가. runOnUiThread는 UI Thread에서 실행되는 "다운로드를 위해 무언가를합니다."애플리케이션이 NetworkOnMainThreadException에 대해 충돌해야합니다. App은 GingerBread보다 안드로이드 버전이 더 많은 장치에서 실행됩니다. 다르게 그것은 진행 막대를 그릴 수 없도록 사용자 스레드를 차단합니다.

1

문제는

runOnUiThread (새의 Runnable() {

 public void run() { 

     // do something for downloading 

    } 
    }); 

UI 스레드가 여전히 사용중인 경우해서 ProgressDialog가 업데이트되지 않습니다. SO의 많은 사례가 거기에 있습니다. 나는 돈에 UIthread가 필요한 이유를 이해하지 못합니다. 그리고 경험적으로 볼 때 진행률 대화 상자가 필요하면 항상 그렇듯이 백그라운드 스레드에서 asynctask를 실행해야합니다.

(210)

당신은 아래의 예를

http://www.androidhive.info/2012/01/android-json-parsing-tutorial/

+0

나는 당신의 연결을 사용한다, 그들은 아주 도움이된다. 감사. –