web-dev-qa-db-ja.com

HttpEntityはAndroidで非推奨になりましたが、代替手段は何ですか?

Android 5.1のリリースでは、すべてのApache httpが非推奨になったように見えます。ドキュメントを見るのは無意味です。

This class was deprecated in API level 22. Please use openConnection() instead. Please visit this webpage for further details.

初めて読むときはこれで問題ありませんが、廃止されたすべてのクラスがそれを言っているとき、それはそれほど役に立ちません。

とにかく、HttpEntity、特にStringEntity、およびMultipartEntity?などのクラスの代替は何ですか?私はBasicNameValuePairを自分のものに置き換えましたAndroidのPair<T, S>クラス、およびURLEncoder.encodeURLEncodedUtilsの適切な代替物ですが、HttpEntityについて何をすべきかわかりません。

[〜#〜] edit [〜#〜]

私はネットワーク関連のものを書き直すことにしました。 RetrofitとOkHttpを使用してみる

[〜#〜] edit [〜#〜]

真剣にあなたの電話とスタッフをレトロフィットに切り替えることを見てください。かなり気の利いた。できてうれしいです。いくつかのハードルがありましたが、それはクールです。

44
joshkendrick

常に最後の Apache Http クライアントをインポートして使用できます。また、代わりに使用できる場合に備えて、 Volley または Retrofit のようなネットワークライブラリを確認することもできます。新しいプロジェクトを開始する場合は、車輪を再発明する必要がないため、ネットワークライブラリの使用をお勧めします。ただし、HttpClientの使用にこだわる場合は、先に進んでください。

編集:Apache HttpClientの最新ニュース(2015年11月7日現在)

Google Android 1.0は、Apache HttpClientのベータ前のスナップショットとともにリリースされました。最初のAndroidリリースに合わせて、Apache HttpClient 4.0 APIを早めに凍結する必要がありましたが、多くのインターフェイスと内部構造はまだ完全には機能していませんでした。 Apache HttpClient 4.0が成熟するにつれて、プロジェクトはGoogleが最新のコード改善をコードツリーに組み込むことを期待していました。残念ながらそれは起こりませんでした。 Androidに同梱されているApache HttpClientのバージョンは、事実上フォークになりました。最終的にGoogleは、互換性の問題をそのような決定の理由として挙げて、Apache HttpClientのストックバージョンへのアップグレードを拒否しながら、フォークのさらなる開発を中止することを決定しました。その結果、AndroidでApache HttpClient APIの使用を継続したいAndroid開発者は、新しい機能、パフォーマンスの向上、およびバグ修正を利用できません。 Android用のApache HttpClient 4.3ポートは、Google Androidと互換性のある公式リリースを提供することで状況を改善することを目的としていました。 Android API 23の時点で、GoogleのHttpClientのフォークが削除されたことを考えると、このプロジェクトは中止されました。

ただし、Apache HttpClient v4.3の公式のAndroidポートがあります

Android API 22以前はApache HttpClient v4.3を使用する必要があります

dependencies {
         compile group: 'org.Apache.httpcomponents' , name: 'httpclient-Android' , version: '4.3.5.1' 
}

Android API 23以降はAndroidにApache HttpClientパッケージを使用する必要があります Marek Seberaにより管理

dependencies {
     compile group: 'cz.msebera.Android' , name: 'httpclient', version: '4.4.1.1' 
}

Apache.org から取得した情報

20
C0D3LIC1OU5

HttpClient のドキュメントは正しい方向を示しています。

_org.Apache.http.client.HttpClient_:

このインターフェイスはAPIレベル22で廃止されました。代わりにopenConnection()を使用してください。詳細については、このWebページをご覧ください。

Java.net.URL.openConnection()に切り替える必要があることを意味します。

方法は次のとおりです。

_Java.net.URL url = new Java.net.URL("http://some-server");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");

// read the response
System.out.println("Response Code: " + conn.getResponseCode());
InputStream in = new BufferedInputStream(conn.getInputStream());
String response = org.Apache.commons.io.IOUtils.toString(in, "UTF-8");
System.out.println(response);
_
12
fateddy

Webサービスhttpclientをhttpurlconnectionに置き換えて呼び出します

ここに私のコード

public static String getDataFromUrl(String url) {
        String result = null;
//        System.out.println("URL comes in jsonparser class is:  " + url);
        try {
            URL myurl=new URL(url);
            HttpURLConnection urlConnection = (HttpURLConnection) myurl
                    .openConnection();
            urlConnection.setRequestMethod("GET");
            urlConnection.setDoInput(true);
            urlConnection.connect();
            InputStream is=urlConnection.getInputStream();
            if (is != null) {
                StringBuilder sb = new StringBuilder();
                String line;
                try {
                    BufferedReader reader = new BufferedReader(
                            new InputStreamReader(is));
                    while ((line = reader.readLine()) != null) {
                        sb.append(line);
                    }
                    reader.close();
                } finally {
                  is.close();
                }
                result = sb.toString();
            }
        }catch (Exception e){
            result=null;
        }
        return result;
    }
2
Lakhan patidar