HttpClient设置超时的问题
============问题描述============
我试了很多种方法设置HttpClient超时问题就没有效果,我之前设置连接超时为5秒,读取超时为5秒,一次请求不成功到返回用了20秒,然后我回家写了一个demo,各种方法试,没效果,求大神帮我看看,感激不尽
package com.example.connectiontimeout; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.params.CoreConnectionPNames; import org.apache.http.params.HttpConnectionParams; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity{ private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button)findViewById(R.id.button1); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { new TimeoutAsyncTask().execute(); } }); } //异步超时任务 public class TimeoutAsyncTask extends AsyncTask<Void, Void, String>{ @Override protected String doInBackground(Void... voids) { String result = null; HttpResponse httpResponse; BufferedReader br = null; //访问这样子一个不存在的网站http://www.xiaanming.com/ HttpGet httpGet = new HttpGet("http://www.xiaanming.com/"); HttpClient httpClient = new DefaultHttpClient(); //方法一, 此方法设置超市无效 要等1分20多秒 httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 3000); httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 3000); //方法二,无效,还是了很多种方法 // HttpConnectionParams.setConnectionTimeout(httpClient.getParams(), 3000); // HttpConnectionParams.setSoTimeout(httpClient.getParams(), 2000); // try { httpResponse = httpClient.execute(httpGet); if(httpResponse.getStatusLine().getStatusCode() == 200){ br = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent())); String line = null; while((line = br.readLine()) != null){ result = result + line; } } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ try { if(br != null){ br.close(); br = null; } } catch (IOException e) { e.printStackTrace(); } httpClient.getConnectionManager().shutdown(); } return result; } } }
代码就是上面的啦,一个按钮,点击请求网络,http://www.xiaanming.com是一个不存在的域名
============解决方案1============
我测试过了啊,下面的代码是有效的:
HttpConnectionParams.setConnectionTimeout(httpClient.getParams(), 15000); HttpConnectionParams.setSoTimeout(httpClient.getParams(), 10000);