繁体   English   中英

Android - HttpClient只能运行一次

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM