AndroidはAPIレベル22以降、Apacheモジュールを非推奨にしているので、私の質問は、たとえばAndroid SDKではなく、ApacheライブラリのHttpResponse
をどのように使用すればよいですか?問題は、両方のパッケージで同じだということです。
ただし、たとえば、HttpGet
は問題ありません。ApacheではHttpGetHC4
と呼ばれるためです。
メソッドHttpClientは廃止されました。この例でわかるように、URLConnectionを使用できるようになりました。
private StringBuffer request(String urlString) {
// TODO Auto-generated method stub
StringBuffer chaine = new StringBuffer("");
try{
URL url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setRequestProperty("User-Agent", "");
connection.setRequestMethod("POST");
connection.setDoInput(true);
connection.connect();
InputStream inputStream = connection.getInputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(inputStream));
String line = "";
while ((line = rd.readLine()) != null) {
chaine.append(line);
}
}
catch (IOException e) {
// Writing exception to log
e.printStackTrace();
}
return chaine;
}
これが誰かを助けることを願っています。
Apacheのモジュールを使用しても何も悪いことはありません。 Googleはフォークを成功させることができなかったため、大きな混乱をもたらしました。 GoogleとApacheの統合はJesse Wilsonが監督しました。彼はGoogleで働き、すべてを台無しにしてから、スクエアでの作業中に独自のライブラリ(OkHttp)を作成しました。それは本当にい話です。
古いバージョンのApacheライブラリが含まれており、改善やバグ修正が行われていないため、レガシーのJARファイルを使用しないことをお勧めします(これは 非常に古いpre-BETAスナップショット です)。 Apacheコンポーネントの 公式ページ でわかるように、Androidバージョンのすべてと互換性のある新しい4.4バージョンがあります。古いバージョンとの衝突を避けるために、異なる名前空間で再パッケージ化する必要がありました。
Maven (または GitHubからリリースをダウンロード )から依存関係を追加するだけです:
dependencies {
compile "cz.msebera.Android:httpclient:4.4.1.2"
}
そして、org.Apache.http
をcz.msebera.Android.httpclient
に置き換えると、インポートは次のようになります。
import cz.msebera.Android.httpclient.Header;
import cz.msebera.Android.httpclient.HttpHost;
import cz.msebera.Android.httpclient.HttpResponse;
ええ、作業コードの書き換えに何時間も無駄にすることなく、Apacheライブラリの使用を続けることができます!
ApacheコンポーネントとHttpURLConnectionの使用の違いについては、HttpURLConnectionは応答キャッシュを使用します...それだけです。私はあなたが本当にそれを望んでいるかどうかもわかりませんし、あなた自身でいつでもそれを実装することができます。
ところで、私はHttpURLConnectionのような代替手段を試しました-それらはApacheのパワーとシンプルさにも近くありません。
Android Marshmallow(sdk 23)では、次を追加できます。
useLibrary 'org.Apache.http.legacy'
回避策としてAndroid {}
セクションのbuild.gradleに。これは、Google独自のgmsライブラリの一部に必要なようです!
もし私があなただったら、私はHttpClient
を使用しません:
Apache HTTPクライアントでは、EclairとFroyoのバグが少なくなっています。これらのリリースに最適です。
Gingerbread以上の場合、HttpURLConnectionが最適です。
OKHttp または HttpUrlConnection を使用します。また、ApacheライブラリはAndroidにとって効率的ではない可能性があるため、使用しないことをお勧めします。
Androidに同梱されているものではなく、プロジェクトでApacheライブラリを直接使用できると思います(この方法でさらに制御できます。必要に応じて古いSDKバージョンでコンパイルできます)。
build.gradleで、次の行を追加します。
dependencies {
compile group: 'org.Apache.httpcomponents' , name: 'httpclient-Android' , version: '4.3.5.1'
}
警告を防ぐには、これらの行も追加します:
Android {
-- YOUR EXISTING LINES --
packagingOptions {
exclude 'META-INF/DEPENDENCIES.txt'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/notice.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/dependencies.txt'
exclude 'META-INF/LGPL2.1'
}
}
これをアプリの依存関係に追加すると、正しく機能します。
dependencies {
...
compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.Apache.http.client:4.1.2'
}
それでもhttpclientライブラリを使用する場合は、build.gradleファイルに説明を追加する必要があります。そして、build.gradleファイルに追加されるコンテンツは、ターゲットAndroidプロジェクトビルドによって決定されるようです。
aPI22以前を対象とする場合は、build.gradleに次の行を追加する必要があります
dependencies {
compile group: 'org.Apache.httpcomponents' , name: 'httpclient-Android' , version: '4.3.5.1'
}
aPI23以降を対象とする場合、次の行をbuild.gradleに追加する必要があります
dependencies {
compile group: 'cz.msebera.Android' , name: 'httpclient', version: '4.4.1.1'
}
ここにリファレンスがあります link