Okhttp 3の一般的な方法と簡単な使用

3562 ワード

多いのは紹介しないで、直接本題に入ります
依存関係:
//OkHttp3
implementation 'com.facebook.stetho:stetho-okhttp3:1.5.0'
//  okHttp3  
implementation 'com.squareup.okhttp3:logging-interceptor:3.12.1'

注意すべき点
一、結果が返されたスレッドがメインスレッドではない
二、成功後の結果はResponseオブジェクトresponseを使用する必要がある.body().string().注意:response.body()はnullかもしれません注意が必要です
1.getリクエストの同期:
public String getExecuteHttp() throws IOException {
    //1.  OkHttpClient  
    OkHttpClient okHttpClient = new OkHttpClient();
    Request request = new Request.Builder()
            .url("http://www.baidu.com")
            .build();
    Response response = okHttpClient.newCall(request).execute();
    return response.body().string();
}

2.非同期getリクエスト:
 
   public void getEnqueueHttp() {
        //1.  OkHttpClient  
        OkHttpClient okHttpClient = new OkHttpClient();
        Request request = new Request.Builder()
//                .get()                          ,      ,  get  
//                .method("GET",null)
                .url("http://www.baidu.com")
                .build();
        okHttpClient.newCall(request)
                .enqueue(new Callback() {
                    @Override
                    public void onFailure(Call call, IOException e) {
                        Log.d("onFailure", "onFailure");
                    }

                    @Override
                    public void onResponse(Call call, Response response) throws IOException {
                        Log.d("onResponse", "onResponse" + response.body().string());
                    }
                });
    }

 3.非同期postリクエスト:
public void postHttp() {
    OkHttpClient okHttpClient = new OkHttpClient();
    RequestBody requestBody = new FormBody.Builder()
            .add("page", "1")
            .add("count", "10")
            .build();
    Request request = new Request.Builder()
            .url("http://www.duans.top/freeApi/api.php?act=getJoke")
            .post(requestBody)
            .build();
    okHttpClient.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            Log.d("onFailure", "onFailure");
        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            Log.d("onResponse", "onResponse" + response.body().string());
        }
    });
}

4.タイムアウトの設定:
//1.  OkHttpClient  
OkHttpClient okHttpClient = new OkHttpClient.Builder()
        //    ,       
        .retryOnConnectionFailure(true)
        //        ,     
        .connectTimeout(15, TimeUnit.SECONDS)
        .readTimeout(30, TimeUnit.SECONDS)
        .writeTimeout(30, TimeUnit.SECONDS)
        .build();

5.印刷要求のログ
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
//    BODY      ,         
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

使用方法:
OkHttpClient okHttpClient = new OkHttpClient.Builder()
        .addInterceptor(interceptor)
        .build();

印刷内容をカスタマイズすることもできます.
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
    @Override
    public void log(String message) {
        Log.e("okHttp->", message);
    }
});

絶えず進歩する.