1.2 okhttp入門

11990 ワード

一.概要
OkHttpは高効率なHTTPクライアントであり、HTTP/2をサポートして、同じホストアドレスのすべての要求を共有することができます。同じsocket接続接続プールに接続してください。遅延を要求することができます。透明なGZIP圧縮は応答データのサイズを減らします。これは自動的に一般的な接続問題を回復します。もしあなたのサービスに複数のIPアドレスがあったら、最初のIP要求が失敗したら、OkHttpは他のIPを交互に試してみます。OkHttpは現代のTLS技術(SNI、ALPN)を使って新しい接続を初期化します。握手が失敗したらTLS 1.0に戻ります。ノート:OkHttpはAndroid 2.3及び以上のAndroidプラットフォームをサポートしています。Java、JDK 1.7及び以上に対応しています。
二.使用
OkHttpの使用は非常に簡単であり、その要求/応答APIは、ブロックされた同期要求と帯域バックの非同期要求をサポートするビルダーモードbuildersを使用して設計される。公式サイト:https://github.com/square/okhttp
依存度を追加:
compile 'com.squareup.okhttp3:okhttp:3.11.0'
2.1 GET要求
-new OkHttp Client;-Requestオブジェクトを作成します。-2ステップ前のオブジェクトからCallオブジェクトを構築します。−Call call enqueue(Callback)方法により非同期要求を提出する。
String url = "http://wwww.baidu.com";
OkHttpClient okHttpClient = new OkHttpClient();
final Request request = new Request.Builder()
        .url(url)
        .get()//    GET  ,    
        .build();
Call call = okHttpClient.newCall(request);
2.2 POST要求
OkHttpClient okHttpClient = new OkHttpClient(); //   client  
        FormBody formBody = new FormBody.Builder() // form  
                .add("name","lisi")
                .build();
          
        Request request = new Request.Builder()
                .post(formBody)
                .url(food_url).build(); //             
        Call call = okHttpClient.newCall(request);
        ....  
2.3同期と非同期
同期;閉塞式では、現在のスレッドで論理的に非同期を実行します。現在のスレッドでは、スレッド実行ロジックを新規作成し、タイムロスタスクロジックに適合します。
//       ,    
call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.d(TAG, "onFailure: ");
            }
            @Override
            public void onResponse(Call call, Response response) throws IOException {


            }
    }
//同期方法を取調し、対象に戻ります。
Response execute = call.execute();
2.4 okhttpキャッシュ追加
long maxSize = 1024 * 1024 * 4; //       4Mb


OkHttpClient okHttpClient = new OkHttpClient.Builder()
        .cache(new Cache(getCacheDir(), maxSize))//         
        .build();
Request request = new Request.Builder().url("http://gank.io/api/data/%E7%A6%8F%E5%88%A9/20/1").build();

okHttpClient.newCall(request).enqueue(new Callback() {
    @Override
    public void onFailure(Call call, IOException e) {
        Log.d(TAG, "onFailure: " + e.getMessage());
    }


    @Override
    public void onResponse(Call call, Response response) throws IOException {


        Log.d(TAG, "onResponse: " + response.body().string());
    }
});