【问题标题】:Http methods deprecated warning in android studioandroid studio中不推荐使用Http方法的警告
【发布时间】:2015-10-26 09:13:28
【问题描述】:

我正在尝试使用参数发出一些 http 请求。目前我正在使用

 private List<NameValuePair> mParams = new ArrayList<NameValuePair>();
 private DefaultHttpClient mHttpClient;
 private HttpPost mHttpPost;

这些用于发出 http 请求,并且工作正常。但问题是 android studio 正在向所有人显示已弃用的警告 这 3 个。我尝试使用 HttpClientBuilder.create().build(); 但 android studio 无法导入 HttpClientBuilder 的库 我尝试下载并添加this jar dependency,但仍然无法正常工作。这是我的代码

        mHttpClient = new DefaultHttpClient();
        mHttpPost = new HttpPost(url);
        mParams.add(new BasicNameValuePair("key", value));
        mHttpPost.setEntity(new UrlEncodedFormEntity(mParams));

所有这些行都显示不推荐使用的警告,这是替代方法吗?

【问题讨论】:

标签: android android-studio deprecated androidhttpclient


【解决方案1】:

您可以使用HttpsURLConnection 代替DefaultHttpClient。同样不推荐使用NameValuePair,使用Uri.BuilderappendQueryParameter 发送请求参数。

试试下面的代码:

URL url = new URL("http://myurl.com");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setReadTimeout(10000);
connection.setConnectTimeout(15000);
connection.setRequestMethod("POST");
connection.setDoInput(true);
connection.setDoOutput(true);
Uri.Builder builder = new Uri.Builder()
       .appendQueryParameter("key1", valu1)
       .appendQueryParameter("key2", value2);
String query = builder.build().getEncodedQuery();
OutputStream os = connection.getOutputStream();
BufferedWriter writer = new BufferedWriter(
       new OutputStreamWriter(os, "UTF-8"));
writer.write(query);
writer.flush();
writer.close();
os.close();
connection.connect();

【讨论】:

    【解决方案2】:

    HttpClient 已被弃用,因为 API level 22。首选HttpURLConnection 获取新代码。

    Android 包括两个 HTTP 客户端:HttpURLConnection 和 Apache HTTP 客户端。两者都支持 HTTPS、流式上传和下载、可配置的超时、IPv6 和连接池。 Apache HTTP 客户端在 Android 2.2 (Froyo) 及更早版本中的错误较少。对于 Android 2.3 (Gingerbread) 及更高版本,HttpURLConnection 是最佳选择。其简单的 API 和小尺寸使其非常适合 Android。透明压缩和响应缓存可减少网络使用、提高速度并节省电池。有关两个 HTTP 客户端的比较,请参阅 Android 开发者博客。

    【讨论】:

      【解决方案3】:

      IDE 在new DefaultHttpClient 上提示警告,将此类标记为已弃用[Api 22 中已弃用]

      要解决它,请使用HttpClientBuilder

          HttpClient client = HttpClientBuilder.create().build();
          HttpGet request = new HttpGet("http://www.google.com");
          HttpResponse response = client.execute(request);
      

      【讨论】:

        【解决方案4】:

        DefaultHttpClient 类已弃用,您可以使用 HttpUrlConnection 类。 HttpUrlConnection 有简单的 API。 NameValuePair 类可能在 api 22 中被弃用。您可以使用 ContentValues (android.content.ContentValues) 代替 NameValuePair。

        ContentValues contentValues = new ContentValues();
                contentValues.put("Param_name1", Param_value1);
                contentValues.put("Param_name2", Param_value2);
        

        我正在使用 Okhttp 客户端进行 get 和 post 调用。 http://square.github.io/okhttp/

        我认为此链接会对您有所帮助 http://developer.android.com/reference/org/apache/http/impl/client/DefaultHttpClient.html

        【讨论】:

          【解决方案5】:

          from this link 你可以下载httpclient4.5的最新jar。并使用

          HttpClient httpClient = HttpClientBuilder.create().build();
          

          【讨论】:

            猜你喜欢
            • 2014-04-27
            • 2020-01-31
            • 2020-05-14
            • 1970-01-01
            • 2020-02-23
            • 2019-09-21
            • 2016-09-19
            • 2015-02-26
            • 2017-03-01
            相关资源
            最近更新 更多