在 android 上使用 AsyncTask 进行 HTTP GET 会导致发送数据的长时间延迟
Using AsyncTask for an HTTP GET on android causes a long delay in sending data
我正在使用 AsyncTask 在 android 上执行 HTTP GET。它导致我的数据发送到 URL 的时间很长。有没有办法解决这个问题或可以使用其他方法?
这是我的代码:
class RequestTask 扩展了 AsyncTask{
@Override
protected String doInBackground(String... uri) {
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response;
String responseString = null;
HttpParams httpParameters = httpclient.getParams();
HttpConnectionParams.setTcpNoDelay(httpParameters, true);
try {
response = httpclient.execute(new HttpGet(uri[0]));
StatusLine statusLine = response.getStatusLine();
if(statusLine.getStatusCode() == HttpStatus.SC_OK){
ByteArrayOutputStream out = new ByteArrayOutputStream();
response.getEntity().writeTo(out);
responseString = out.toString();
out.close();
} else{
//Closes the connection.
response.getEntity().getContent().close();
throw new IOException(statusLine.getReasonPhrase());
}
} catch (ClientProtocolException e) {
//TODO Handle problems..
} catch (IOException e) {
//TODO Handle problems..
}
return responseString;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
//Do anything with response..
}
}
电话是这样的:
new RequestTask().execute("http://10.10.10.211:9081/?modelname=model1&sourcedata=" + values[1]);
这不一定是您问题的答案,但我真的建议使用 Retrofit 从 Android 进行 REST 调用(与 RxJava 一起使用效果更好)。在任何一种情况下,您都不应该因为在后台线程中发出请求而看到太多延迟。
除了网络问题,我想不出任何延迟的原因!
处理Http网络调用很痛苦,需要做很多工作来处理,但是,为什么要重新造轮子?!
有些图书馆确实为我们处理了所有杂乱的事情,请使用其中一个。
我在我的项目中使用了 OKHTTP,它非常好。
This 是 CommonsWare 的回答,
请去读一读,它会很有帮助。
我建议您使用 Volley 这种方法。我在我的项目中使用它,我从来没有遇到过任何问题。
我正在使用 AsyncTask 在 android 上执行 HTTP GET。它导致我的数据发送到 URL 的时间很长。有没有办法解决这个问题或可以使用其他方法?
这是我的代码: class RequestTask 扩展了 AsyncTask{
@Override
protected String doInBackground(String... uri) {
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response;
String responseString = null;
HttpParams httpParameters = httpclient.getParams();
HttpConnectionParams.setTcpNoDelay(httpParameters, true);
try {
response = httpclient.execute(new HttpGet(uri[0]));
StatusLine statusLine = response.getStatusLine();
if(statusLine.getStatusCode() == HttpStatus.SC_OK){
ByteArrayOutputStream out = new ByteArrayOutputStream();
response.getEntity().writeTo(out);
responseString = out.toString();
out.close();
} else{
//Closes the connection.
response.getEntity().getContent().close();
throw new IOException(statusLine.getReasonPhrase());
}
} catch (ClientProtocolException e) {
//TODO Handle problems..
} catch (IOException e) {
//TODO Handle problems..
}
return responseString;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
//Do anything with response..
}
}
电话是这样的:
new RequestTask().execute("http://10.10.10.211:9081/?modelname=model1&sourcedata=" + values[1]);
这不一定是您问题的答案,但我真的建议使用 Retrofit 从 Android 进行 REST 调用(与 RxJava 一起使用效果更好)。在任何一种情况下,您都不应该因为在后台线程中发出请求而看到太多延迟。
除了网络问题,我想不出任何延迟的原因!
处理Http网络调用很痛苦,需要做很多工作来处理,但是,为什么要重新造轮子?!
有些图书馆确实为我们处理了所有杂乱的事情,请使用其中一个。
我在我的项目中使用了 OKHTTP,它非常好。
This 是 CommonsWare 的回答,
请去读一读,它会很有帮助。
我建议您使用 Volley 这种方法。我在我的项目中使用它,我从来没有遇到过任何问题。