繁体   English   中英

在Android中实现HTTP请求超时的最佳方法是哪一种?

[英]Which is the best way to implement timeout for HTTP request in Android?

那是我的样品!

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();

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM