okHttp

創建對象

OkHttpClient OK_HTTP_CLIENT = new OkHttpClient.Builder().build()

請求Requests(請求)

每一個HTTP請求中都應該包含一個URL,一個GET或POST方法以及Header或其他參數,當然還可以含特定內容類型的數據流。

Responses(響應)

 響應則包含一個回覆代碼(200代表成功,404代表未找到),Header和定製可選的body。

同步get請求

      public static void GetString(String url) {
        Request request = new Request.Builder().url(url).build();
        try {
            okhttp3.Response response = OK_HTTP_CLIENT.newCall(request).execute();
            if (response.isSuccessful()) {
                Headers responseHeaders = response.headers();
                for (int i = 0; i < responseHeaders.size(); i++) {
                    System.out.println(responseHeaders.name(i) + ": " + responseHeaders.value(i));
                }

                System.out.println(response.body().string());

            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

異步get

 public static void EnqueueGet(String url) {
        Request request = new Request.Builder().url(url).build();
        OK_HTTP_CLIENT.newCall(request).enqueue(new Callback() {
                                                    @Override
                                                    public void onFailure(Call call, IOException e) {

                                                    }

                                                    @Override
                                                    public void onResponse(Call call, Response response) throws IOException {
                                                        if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);

                                                        Headers responseHeaders = response.headers();
                                                        for (int i = 0; i < responseHeaders.size(); i++) {
                                                            System.out.println(responseHeaders.name(i) + ": " + responseHeaders.value(i));
                                                        }

                                                        System.out.println(response.body().string());

                                                    }
                                                }

        );
    }

添加請求頭

 Request request = new Request.Builder().url(url)
                .header("User-Agent", "OkHttp Headers.java")
                .addHeader("Accept", "application/json; q=0.5")
                .addHeader("Accept", "application/vnd.github.v3+json")
                .build();

添加攔截器

///當有攔截器的時候,任務會先被髮送到攔截器中,在通過攔截器往下傳遞
 private final static OkHttpClient OK_HTTP_CLIENT = new OkHttpClient.Builder().addInterceptor(new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {
            Request request = chain.request();
            Log.e("ljl", "請求地址====" + request.url());
            Headers headers = request.headers();
            RequestBody body = request.body();
            for (int i = 0; i < headers.size(); i++) {
                Log.e("ljl", headers.name(i) + "========" + headers.value(i));
            }
            return chain.proceed(request);
        }
    }).build();

postkey-value參數請求方式

    public static void PostString(String url, Map<String, String> params) {
        // RequestBody body = new MultipartBody.Builder().build();
        MultipartBody.Builder builder = new MultipartBody.Builder();
        for (String key : params.keySet()) {
            String val = params.get(key);
            try {
                builder.addFormDataPart(key, val);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        RequestBody body = builder.build();
        Request request = new Request.Builder().url(url)
                .post(body)
                .build();
        try {
            okhttp3.Response response = OK_HTTP_CLIENT.newCall(request).execute();
            if (response.isSuccessful()) {
                Headers responseHeaders = response.headers();
                for (int i = 0; i < responseHeaders.size(); i++) {
                    System.out.println(responseHeaders.name(i) + ": " + responseHeaders.value(i));
                }

                System.out.println(response.body().string());

            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

post 上傳圖片

 /**
     * @param url    請求地址
     * @param params 請求參數
     * @param list   上傳圖片的路徑集合
     */
    public static void PostImage(String url, Map<String, String> params, List<String> list) {
        MultipartBody.Builder builder = new MultipartBody.Builder();
        for (String key : params.keySet()) {
            String val = params.get(key);
            try {
                builder.addFormDataPart(key, val);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        for (String path : list) {
            if (path != null) {
                File file = new File(path);
                builder.addFormDataPart("attachmentFile", file.getName(), RequestBody.create(MEDIA_TYPE_PNG, file));
            }
        }
        //構建請求體
        RequestBody requestBody = builder.build();
//構建請求
        Request request = new Request.Builder()
                .url(url)//地址
                .post(requestBody)//添加請求體
                .build();
        OK_HTTP_CLIENT.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                System.out.println(e.toString());
                Log.e("ljl", "errer====" + e.toString());
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);

                Headers responseHeaders = response.headers();
                for (int i = 0; i < responseHeaders.size(); i++) {
                    System.out.println(responseHeaders.name(i) + ": " + responseHeaders.value(i));
                }

                System.out.println(response.body().string());
                Log.e("ljl", "數據信息==" + response.body().string());
            }
        });
    }

簡單的使用就完成了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章