在Android中实现HTTP请求超时的最佳方式是什么?
问题描述:
那我的样品!在Android中实现HTTP请求超时的最佳方式是什么?
private void onGet(String command, int requestType){
HttpGet getRequest = new HttpGet("http://" + getHost() + ":" + getPort() + getServerCgiPath() + command);
Client.sendRequest(getRequest, requestType, getCallBack());
}
...就在那里我已经建立了我的HttpClient
public class Client {
public static void sendRequest(final HttpUriRequest request,
int RequestType,
ResponseListener callback ) {
(new AsynchronousSender(new DefaultHttpClient(), request, RequestType,
new Handler(), new CallbackWrapper(callback))).start();
}
}
...
public class AsynchronousSender extends Thread {
private DefaultHttpClient httpClient;
private HttpUriRequest request;
private Handler handler;
private CallbackWrapper wrapper;
private int requestType;
protected AsynchronousSender(DefaultHttpClient httpClient, HttpUriRequest request,
int requestType, Handler handler, CallbackWrapper wrapper) {
setRequest (request);
setHandler (handler);
setWrapper (wrapper);
setClient (httpClient);
setRequestType (requestType);
}
public void run() {
try {
final HttpResponse response;
final HttpParams httpParams = getClient().getParams();
HttpConnectionParams.setConnectionTimeout (httpParams, 5000);
HttpConnectionParams.setSoTimeout (httpParams, 5000);
Log.d("Ehome", "before execute reauest");
response = getClient().execute(getRequest());
Log.d("Ehome", "post execute reauest");
int status = response.getStatusLine().getStatusCode();
switch(status){
case HttpStatus.SC_OK:
getWrapper().setResponse(response);
getWrapper().setRequestType(getRequestType());
getHandler().post(getWrapper());
break;
default:
break;
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private HttpClient getClient() {
return httpClient;
}
...
答
HttpConnectionParams是类使用:
示例代码(如半拉为你:-))
HttpClient httpClient = new DefaultHttpClient();
final HttpParams httpParams = httpClient.getParams();
HttpConnectionParams.setConnectionTimeout(httpParams, 5000);
HttpConnectionParams.setSoTimeout(httpParams, 5000);
所以,你必须做这样的事情(不深刻检查你的代码):
public class Client {
public static void sendRequest(final HttpUriRequest request,
int RequestType,
ResponseListener callback) {
HttpClient httpClient = new DefaultHttpClient();
final HttpParams httpParams = httpClient.getParams();
HttpConnectionParams.setConnectionTimeout(httpParams, 5000);
HttpConnectionParams.setSoTimeout(httpParams, 5000);
(new AsynchronousSender(httpClient, request, RequestType,
new Handler(), new CallbackWrapper(callback))).start();
}
是的,我曾尝试过,但它不起作用。 – Lunatik 2011-03-13 08:52:18
它应该工作 - 也许你必须发布你如何尝试它! – FrVaBe 2011-03-13 17:58:26
对不起,我改进了我的示例。 – Lunatik 2011-03-13 19:04:38