2016-11-30 44 views
1

我的android應用程序使用ProgressDialog。當發送HTTP請求到服務器(RESTful Web服務)的對話框顯示,從服務器接收結果時,對話框牆根停止不確定進度條android

private class GetMyTimeSheetTask extends AsyncTask<String, Void, String> 
{ 
    private ProgressDialog progress; 

    protected String doInBackground(String... params) { 

     MyTimeSheetFragment.this.getActivity().runOnUiThread(new Runnable() { 
      public void run() { 
       progress = new ProgressDialog(MyTimeSheetFragment.this.getContext()); 
       progress.setTitle(getResources().getString(R.string.app_name)); 
       progress.setMessage(getResources().getString(R.string.loading)); 
       progress.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
       progress.setCancelable(false); 
       progress.show(); 
      } 
     }); 

     String result = HttpUtil.httpGet(
       params[0], params[1], 
       params[2], params[3], 
       params[4]); 
     return result; 
    } 

    protected void onPostExecute(String param) { 
     progress.dismiss(); 
     .... 
     } 
    } 

的問題是有時服務器的問題,進度對話框將永遠顯示,我不知道如何關閉它。如何解決這個問題呢?感謝任何幫助。

+1

後某些秒響應未收到或空&& progressdialog.isshowing(您可以在處理程序,並在處理程序運行ASYC),則取消對話框並顯示一些錯誤消息 –

回答

1

嘗試用異步任務一起執行超時情況

2

你HttpUtil時超時,所以你可以隱藏對話框,當你收到這些例外消息應該返回錯誤發生時的錯誤消息,並且超時信息。 我看不到HttpUtil代碼,這裏也許一個解決方案至今:

private class GetMyTimeSheetTask extends AsyncTask<String, Void, String> { 
    private static final int REQUEST_TIMEOUT = 5000; 
    private ProgressDialog progress; 
    private Handler handler = new Handler(Looper.getMainLooper()); 
    private Runnable hideDialogTask = new Runnable(){ 
     @Override 
     public void run() { 
      progress.dismiss(); 
     } 
    }; 

    protected String doInBackground(String... params) { 

     MyTimeSheetFragment.this.getActivity().runOnUiThread(new Runnable(){ 
      public void run() { 
      progress = new ProgressDialog(MyTimeSheetFragment.this.getContext()); 
      progress.setTitle(getResources().getString(R.string.app_name)); 
      progress.setMessage(getResources().getString(R.string.loading)); 
      progress.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
      progress.setCancelable(false); 
      progress.show(); 
      handler.postDelayed(hideDialogTask, REQUEST_TIMEOUT); 
     } 
    }); 

    String result = HttpUtil.httpGet(
      params[0], params[1], 
      params[2], params[3], 
      params[4]); 
    return result; 
} 

protected void onPostExecute(String param) { 
    progress.dismiss(); 
    .... 
    } 
} 
+0

另外,請在關閉對話框時檢查Activity的生命週期: –