我開發了一種方法,使網絡http請求,並等待響應。我現在想要處理一個場景,如果http響應需要更長的時間,我想通過拋出某種異常和錯誤來取消/終止connectinn。java:拋出異常或錯誤,如果網絡通話時間過長?
即時通訊不問如何拋出異常和錯誤,我知道,我只是問我怎麼能如何時間多久它採取我檢索一個HTTP響應?下面
僞是這樣的:
- 啓動一些定時器
- 進行HTTP請求
- 等待HTTP請求
- 如果響應犯規X後得到恢復,拋出的錯誤/異常。
他們一直在做的情況下,當我做了一個HTTP請求需要一兩分鐘之後,終於拋出一個異常,但我希望拋出這個異常更快,而不是應用程序凍結和等待3-4分鐘。
在此先感謝
林這樣做了Android應用程序,以便使用Android特定庫或Java 5米的庫應該sufficiant關於如何實現這樣的一個例子。
編輯:這裏是我的http請求的代碼看起來像使用Apache庫:
import org.apache.http.Header;
import org.apache.http.HttpEntity;
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.client.methods.HttpPost;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.entity.InputStreamEntity;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.EntityUtils;
private HttpClient httpclient;
private HttpGet get;
private HttpPost post;
/**
* POST request
*/
private HttpResponseObject PostRequest() {
//int response = 0;
String responseBody = "";
HttpResponseObject response = new HttpResponseObject();
try {
Log.d(TAG, "IN POST_REQUEST_METHOD");
Log.d(TAG, "URL : " + url);
httpclient = new DefaultHttpClient();
post = new HttpPost(url);
ByteArrayEntity entity = new ByteArrayEntity(data.getBytes());
entity.setChunked(true);
post.setEntity(new StringEntity(data));
HttpResponse httpResponse = httpclient.execute(post);
HttpEntity resEntity = httpResponse.getEntity();
if (resEntity != null) {
// indicate that the content of this entity is no longer
// required
response.setResponseBody(EntityUtils.toString(resEntity));
Header[] header = httpResponse.getAllHeaders();
Log.d(TAG, "httpResponse.getAllHeaders() = " + header[0].getName());
response.setResponseHeader(httpResponse.getAllHeaders().toString());
resEntity.consumeContent();
}
// release all recources from the httpClient object
httpclient.getConnectionManager().shutdown();
response.setResponseCode(httpResponse.getStatusLine().getStatusCode()) ;
Log.d(TAG, "responseBody = " + response.getResponseBody());
Log.d(TAG, "response code = " + response.getResponseCode());
Log.d(TAG, "response header = " + response.getResponseHeader());
return response;
} catch (Exception e) {
e.printStackTrace();
Log.d(TAG, "exception e = " + e.toString());
return null;
}
}
請參閱:https://stackoverflow.com/questions/240320/how-can-i-wrap-a-method-so-that-i-can-kill-its-execution-if-it-exceeds-a -specifi – 2017-12-12 20:38:12