2011-03-12 81 views
1

那我的樣品!在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; 
} 

...

回答

1

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

}

+0

是的,我曾嘗試過,但它不起作用。 – Lunatik 2011-03-13 08:52:18

+0

它應該工作 - 也許你必須發佈你如何嘗試它! – FrVaBe 2011-03-13 17:58:26

+0

對不起,我改進了我的示例。 – Lunatik 2011-03-13 19:04:38

相關問題