私はネットワークhttp要求を作成し、応答を待つ方法を開発しました。私は今、http応答が予想より長くかかる場合、何らかの例外とエラーを投げてそのconnectinnをキャンセル/終了したいシナリオを扱いたいと思っています。java:ネットワークコールに時間がかかる場合、例外またはエラーをスローしますか?
私は例外とエラーをスローする方法を尋ねていませんが、私はそれを知っています。以下
擬似は次のようなものです:
-
は、いくつかのタイマー
- を開始
- 応答がXの後に取り出されますdoesntの場合は、エラー/例外をスロー、httpリクエスト
- に対するHTTPリクエスト
- 待機させます。
私はhttp要求をするときにjvmが最後に例外をスローする前に、アプリケーションをフリーズして3-4分待たずにこの例外を速くスローしたい場合がありました。事前に
おかげ
イムアンドロイド特定のlibsやJava 5つのlibsのいずれかがこれを実現する方法については、たとえばsufficiantしなければならないので、Androidのアプリケーションのためにこれをやって。
編集:ここに私のhttpリクエストコードは、Apache LIBSを使用してどのように見えるかです:
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 –