Android OkHttpの詳細
17872 ワード
Android OkHttpの詳細
効果図
GET要求POST要求
OkHttp
まず、OkHttpというフレームワークはSquare社が発売したもので、公式サイトに入ります.APIを見たい場合は、クリックしてAPIに入ります.OkHttpを理解した後、OkHttpはAndroid開発を学ぶときに接触するHttpURLConnectionとApacheが提供するHttpClientの2つのクラスであり、その後、サードパーティのネットワークフレームワークであることを知っておく必要があります.
コンセプト:OkHttpはHttpURLConnectionを置き換えるためのもので、android 4.4ソースコードのHttpURLConnectionをOkHttpに置き換えました.だからOkHttpはこれらのネットワークフレームワークと比べて、これらのネットワークフレームワークもHttpURLConnectionに基づいていくつかのパッケージを行うだけで、私たちのコードをもっと簡潔で便利にします.okhttpは、対応するokhttp-apacheモジュールを提供しています.
HttpURLConnectionとOkHttpの比較利点1.HttpURLConnectionにあるAPI、OkHttpは基本的に2.HttpURLConnectionとOkHttpはいずれもHttpsをサポートし、ストリームのアップロードとダウンロード、タイムアウト、IP 6、接続プールなど3.OkHttpは、HttpURLConnectionよりも同期非同期要求、キャッシュメカニズムが優れており、HttpDNS、リダイレクト、Gzip圧縮、プラットフォーム適応性、サーバIPの変換、直接Socket通信、ブロッキングなどをサポートしています.欠点1.OkHttpは優先度要求2をサポートしない.OkHttpは自己署名証明書3をサポートしていない.OkHttp headerでは中国語が伝わらない
okHttp、volley、android-async-http比較:volleyは単純な非同期httpライブラリであり、それだけです.欠点は同期をサポートしないことであり、開発モデルを制限する.大きなデータをpostできないので、android-async-httpをアップロードするのに適していません.volleyと同様に非同期ネットワークライブラリですが、volleyはパッケージのhttpUrlConnectionであり、パッケージのhttpClientですが、androidプラットフォームはHttpClientを推奨していないので、このライブラリはandroidプラットフォームには適していません.okhttpは高性能のhttpライブラリで、同期、非同期をサポートし、spdy、http 2、websocketプロトコルを実現し、apiは簡潔で使いやすく、volleyと同様にhttpプロトコルのキャッシュを実現しています.OK Http紹介:公式サイトアドレス:クリックしてリンク公式APIアドレスを開く:クリックしてリンクgithubソースアドレスを開く:クリックしてリンクを開くokHttp主要クラス:1.OkHttpClient.java2.Request.java3.Call.java4.RequestBody.java5.Response.java
コードデモ
レイアウトファイルactivity_mainは、レイアウトファイルに2つのButtonを追加してGET POSTクリックイベントで異なることをし、ImageViewはGET要求表示ピクチャに使用する
まずButtonのクリックイベントにswitchを追加してButtonのクリックで違うことをします
1.GETリクエスト:ここでButtonクリックイベントを使用してImageViewに画像をロードします
まずは最初のButtonで
2.POST要求:ここで私はButtonを使ってイベントをクリックしてToastを使ってデータを表示する
2番目のButton
3.Handlerインスタンス化を追加し、Messageによって送信されたデータを受信する
効果図
GET要求POST要求
OkHttp
まず、OkHttpというフレームワークはSquare社が発売したもので、公式サイトに入ります.APIを見たい場合は、クリックしてAPIに入ります.OkHttpを理解した後、OkHttpはAndroid開発を学ぶときに接触するHttpURLConnectionとApacheが提供するHttpClientの2つのクラスであり、その後、サードパーティのネットワークフレームワークであることを知っておく必要があります.
コンセプト:OkHttpはHttpURLConnectionを置き換えるためのもので、android 4.4ソースコードのHttpURLConnectionをOkHttpに置き換えました.だからOkHttpはこれらのネットワークフレームワークと比べて、これらのネットワークフレームワークもHttpURLConnectionに基づいていくつかのパッケージを行うだけで、私たちのコードをもっと簡潔で便利にします.okhttpは、対応するokhttp-apacheモジュールを提供しています.
HttpURLConnectionとOkHttpの比較利点1.HttpURLConnectionにあるAPI、OkHttpは基本的に2.HttpURLConnectionとOkHttpはいずれもHttpsをサポートし、ストリームのアップロードとダウンロード、タイムアウト、IP 6、接続プールなど3.OkHttpは、HttpURLConnectionよりも同期非同期要求、キャッシュメカニズムが優れており、HttpDNS、リダイレクト、Gzip圧縮、プラットフォーム適応性、サーバIPの変換、直接Socket通信、ブロッキングなどをサポートしています.欠点1.OkHttpは優先度要求2をサポートしない.OkHttpは自己署名証明書3をサポートしていない.OkHttp headerでは中国語が伝わらない
okHttp、volley、android-async-http比較:volleyは単純な非同期httpライブラリであり、それだけです.欠点は同期をサポートしないことであり、開発モデルを制限する.大きなデータをpostできないので、android-async-httpをアップロードするのに適していません.volleyと同様に非同期ネットワークライブラリですが、volleyはパッケージのhttpUrlConnectionであり、パッケージのhttpClientですが、androidプラットフォームはHttpClientを推奨していないので、このライブラリはandroidプラットフォームには適していません.okhttpは高性能のhttpライブラリで、同期、非同期をサポートし、spdy、http 2、websocketプロトコルを実現し、apiは簡潔で使いやすく、volleyと同様にhttpプロトコルのキャッシュを実現しています.OK Http紹介:公式サイトアドレス:クリックしてリンク公式APIアドレスを開く:クリックしてリンクgithubソースアドレスを開く:クリックしてリンクを開くokHttp主要クラス:1.OkHttpClient.java2.Request.java3.Call.java4.RequestBody.java5.Response.java
コードデモ
レイアウトファイルactivity_mainは、レイアウトファイルに2つのButtonを追加してGET POSTクリックイベントで異なることをし、ImageViewはGET要求表示ピクチャに使用する
xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.chenxiaoyang.okhttp.MainActivity">
<Button
android:text="Get "
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:id="@+id/button"/>
<Button
android:text="Post "
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/button"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:id="@+id/button2"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:id="@+id/imageView"/>
RelativeLayout>
まずButtonのクリックイベントにswitchを追加してButtonのクリックで違うことをします
1.GETリクエスト:ここでButtonクリックイベントを使用してImageViewに画像をロードします
まずは最初のButtonで
// : okHttpClient
OkHttpClient okHttpClient = new OkHttpClient();
// : , , 。
final Request request = new Request.Builder()
// , Get .method()
// .method("GET",null)
.get()
.url("http://v1.qzone.cc/pic/201303/18/19/13/5146f6cf48042546.jpg!600x600.jpg")
.build();
// : Call
Call call = okHttpClient.newCall(request);
// : Get
call.enqueue(new Callback() {
//
@Override
public void onFailure(Call call, IOException e) {
// UI , Handle
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, " ", Toast.LENGTH_SHORT).show();
}
});
}
//
@Override
public void onResponse(Call call, Response response) throws IOException {
// , UI
// body
//
InputStream inputStream = response.body().byteStream();
// BitmapFactory , decodeStream
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
Message message = Message.obtain();
message.what = 0;
message.obj = bitmap;
mHandler.sendMessage(message);
}
});
2.POST要求:ここで私はButtonを使ってイベントをクリックしてToastを使ってデータを表示する
2番目のButton
// , OkHttpClient
OkHttpClient okHttpClient1 = new OkHttpClient();
// ,
RequestBody requestBody = new FormBody.Builder()
.add("league", " ")
.add("key", "7121c58a9280b7d98ca041949fd579f2")
.build();
Request request1 = new Request.Builder()
.url("http://op.juhe.cn/onebox/football/league")
.post(requestBody)
.build();
// Call
Call call1 = okHttpClient1.newCall(request1);
// GET
call1.enqueue(new Callback() {
//
@Override
public void onFailure(Call call, IOException e) {
// runOnUiThread UI
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, " ", Toast.LENGTH_SHORT).show();
}
});
}
//
@Override
public void onResponse(Call call, Response response) throws IOException {
//
String string = response.body().string();
Message message = Message.obtain();
message.what=1;
message.obj = string;
mHandler.sendMessage(message);
}
});
3.Handlerインスタンス化を追加し、Messageによって送信されたデータを受信する
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if(msg.what==0){
mImageView.setImageBitmap((Bitmap) msg.obj);
}else if(msg.what==1){
Toast.makeText(MainActivity.this, (String) msg.obj, Toast.LENGTH_SHORT).show();
}
}
};