在异步Http客户端上设置超时

时间:2013-07-18 03:56:38

标签: android asynchronous timeout httprequest

我正在使用可在此处找到的异步Http客户端:http://loopj.com/android-async-http/

并且它的效果很好除了大约每10个请求中有1个我最终给了我一个无限进度对话框,我相信无论出于什么原因都没有返回任何类型的响应,因为我已经编写代码来解雇onSuccess和onFailure中的对话框让我有点困惑如何发生这种情况。

以下是设置请求的代码:

  public static void post(String token,String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
     Log.i(token,"token");
      client.addHeader("token", token);
      client.setTimeout(3000);
      client.post(url, params, responseHandler);


  }

这是我覆盖onSuccess和onFailure的地方:

@Override
            public void onFailure(Throwable arg0, String arg1) {
                // TODO Auto-generated method stub
                super.onFailure(arg0, arg1);
                pdialog.dismiss();
                Log.i("failed to login", arg1.toString());
                Toast.makeText(getActivity(), arg1.toString() , Toast.LENGTH_LONG).show();
            }

            @Override
            public void onSuccess(final JSONObject json) {
                pdialog.dismiss();
    }

3 个答案:

答案 0 :(得分:2)

图书馆似乎正在做你想做的事,来自setTimeout类的AsyncHttpClient代码

public void setTimeout(int timeout){
    final HttpParams httpParams = this.httpClient.getParams();
    ConnManagerParams.setTimeout(httpParams, timeout);
    HttpConnectionParams.setSoTimeout(httpParams, timeout);
    HttpConnectionParams.setConnectionTimeout(httpParams, timeout);
}

如果无效,请更好地报告问题here

答案 1 :(得分:0)

经过多次挫折之后,我放弃了解决这个问题,但是如果你只是升级你的lib,那么最新版本可以很容易地实现这一点。

答案 2 :(得分:0)

我认为更好的方法是使用以下重写方法

        @Override
        public void onStart() {
            super.onStart();

          pdialog.dismiss();


        }

        @Override
        public void onFinish() {
            super.onFinish();
           pdialog.dismiss();

        }