[英]Android - HttpClient only works once
我正在后台打开一个网址,因为在转到链接时它“喜欢”文章3020
我是用HttpClient做的:
public static class LoadURL extends AsyncTask<Void, Integer, Void>{
@Override
protected Void doInBackground(Void... params) {
try {
second_client = new DefaultHttpClient();
String getURL = "http://website.com/" + id_string + "/like/";
HttpGet get = new HttpGet(getURL);
HttpResponse responseGet = second_client.execute(get, cookieStuff);
Log.i("Response", String.valueOf(response.getStatusLine().getStatusCode()));
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
Toast.makeText(AFragment.context, "Article liked", Toast.LENGTH_LONG).show();
}
}
问题是有很多文章(3020-3021-3022等),因此用户将多次点击“喜欢”按钮。 这意味着LoadURL任务已完成多次,但它仅在第一次运行。 之后的所有时间都需要5分钟以上。
有人知道如何解决这个问题吗? 还是有比使用HttpClient更好的方法?
您确定Web服务器运行良好吗? 1.你应该做的第一件事是创建一个DefaultHttpsClient
的静态实例并且每次使用相同的实例,它应该运行良好,我已经使用了很多次。 2.看看凌空 ,这是谷歌发布的一个新的网络库
您只需要实例化一次客户端并使用ThreadedClientConnManager重用它
HttpClient mClient;
HttpParams params = new BasicHttpParams();
ConnManagerParams.setMaxTotalConnections(params, 100);
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
schemeRegistry.register(new Scheme ("https", SSLSocketFactory.getSocketFactory(), 443));
ClientConnectionManager cm = new ThreadSafeClientConnManager(params, schemeRegistry);
mClient = new DefaultHttpClient(cm, params);
现在只需重用客户端
public static class LoadURL extends AsyncTask<Void, Integer, Void>{
@Override
protected Void doInBackground(Void... params) {
try {
String getURL = "http://website.com/" + id_string + "/like/";
HttpGet get = new HttpGet(getURL);
HttpResponse responseGet = mClient.execute(get, cookieStuff);
Log.i("Response", String.valueOf(response.getStatusLine().getStatusCode()));
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
Toast.makeText(AFragment.context, "Article liked", Toast.LENGTH_LONG).show();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.