2016-11-30 102 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的生命周期: –