Android okhttp使用

7578 ワード

概要
OKHttpはandroidでネットワークを要求するためによく使われるネットワーク要求フレームワークです.
OKHttpを除いて、Androidの主流のネットリクエストフレームワークは以下の通りです.
  • Android-Async-Http
  • Volley
  • OkHttp
  • Retrofit

  • 依存ライブラリのインポート
    在build.gradleは次の依存性を追加します.
    implementation 'com.squareup.okhttp3:okhttp:4.9.0'

    ネットワーク権限の追加

    getリクエスト
    /**
     *    Get  
     *
     * @param url url
     * @return
     */
    public String syncGet(String url) {
        String result = "";
        //1.  OkHttpClient  
        OkHttpClient okHttpClient = new OkHttpClient();
        Request request = new Request.Builder()
                .url(url)
                .get()
                .build();
        final Call call = okHttpClient.newCall(request);
            //4.          ,        
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        //    ,  Response,   IO  
                        Response response = call.execute();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
    
    
    
        return result;
    }
    
    /**
     *    Get  
     *
     * @param url url
     * @return
     */
    public void nonSyncGet(String url, Callback responseCallback) {
        String result = null;
        //1.  OkHttpClient  
        OkHttpClient okHttpClient = new OkHttpClient();
        //2.  Request  
        Request request = new Request.Builder()
                .url(url)
                .get()
                .build();
        Call call =okHttpClient.newCall(request);
        call.enqueue(responseCallback);
    }

    Postリクエスト
    OkHttpではPostメソッドでキー値対データをサーバに転送しFormBodyを使用する.Builderは要求されたパラメータキー値を作成し、RequestBodyオブジェクトを構築します.
    key-value:キー値対Stringのコミット:文字列タイプForm:フォームデータStream:ストリームタイプFile:ファイルタイプ
    /**
     *   Post  
     *
     * @param url url
     * @return
     */
    public String syncPost(String url) {
        String result = null;
        //1.  OkHttpClient  
        OkHttpClient okHttpClient = new OkHttpClient();
    
        FormBody.Builder mBuild = new FormBody.Builder();
        mBuild.add("name", "tony")
                .add("age", "21");
        RequestBody requestBody= mBuild.build();
        Request request = new Request.Builder()
                .url(url)
                .post(requestBody)
                .build();
        Response response = null;
        try {
            response = okHttpClient.newCall(request).execute();
            if (response.isSuccessful()) {
                result = response.body().string();
            } else {
                throw new IOException("Unexpected code " + response);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    
        return result;
    }
    
    /**
     *   Post  
     *
     * @param url url
     * @return
     */
    public void nonSyncPost(String url, Callback responseCallback) {
        //1.  OkHttpClient  
        OkHttpClient okHttpClient = new OkHttpClient();
        FormBody.Builder mBuild = new FormBody.Builder();
        mBuild.add("name", "tony")
                .add("age", "21");
        RequestBody requestBody= mBuild.build();
        Request request = new Request.Builder()
                .url(url)
                .post(requestBody)
                .build();
        try {
            okHttpClient.newCall(request).enqueue(responseCallback);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * Post json
     *
     * @param url url
     * @return
     */
    public String postJson(String url, Callback responseCallback) {
        String result = null;
        String jsonStr = "json";
        //1.  OkHttpClient  
        OkHttpClient okHttpClient = new OkHttpClient();
        MediaType mediaType = MediaType.parse("application/json; charset=utf-8");
        RequestBody requestBody = RequestBody.create(mediaType, jsonStr);
        Request request = new Request.Builder()
                .url(url)
                .post(requestBody)
                .build();
        Response response = null;
        try {
            response = okHttpClient.newCall(request).execute();
            if (response.isSuccessful()) {
                result = response.body().string();
            } else {
                throw new IOException("Unexpected code " + response);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    
        return result;
    }
    
    /**
     * Post String
     *
     * @param url url
     * @return
     */
    public String postString(String url, Callback responseCallback) {
        String result = null;
        //1.  OkHttpClient  
        OkHttpClient okHttpClient = new OkHttpClient();
        RequestBody requestBody = RequestBody.create(MediaType.parse("text/plain;charset=utf-8"),
                "{username:tony;password:123456}");
        Request request = new Request.Builder()
                .url(url)
                .post(requestBody)
                .build();
        Response response = null;
        try {
            response = okHttpClient.newCall(request).execute();
            if (response.isSuccessful()) {
                result = response.body().string();
            } else {
                throw new IOException("Unexpected code " + response);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    
        return result;
    }

    postフォームリクエスト
    /**
     * Post   
     *
     * @param url url
     * @return
     */
    public String postForm(String url, Callback responseCallback) {
        String result = null;
        //1.  OkHttpClient  
        OkHttpClient okHttpClient = new OkHttpClient();
        MultipartBody.Builder mBuild = new MultipartBody.Builder()
                .setType(MultipartBody.FORM)
                .addFormDataPart("username", "tony")
                .addFormDataPart("password", "123456");
        RequestBody requestBody= mBuild.build();
        Request request = new Request.Builder()
                .url(url)
                .post(requestBody)
                .build();
        Response response = null;
        try {
            response = okHttpClient.newCall(request).execute();
            if (response.isSuccessful()) {
                result = response.body().string();
            } else {
                throw new IOException("Unexpected code " + response);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    
        return result;
    }

    postアップロードファイル
    public void uploadFile(String url) {
        ArrayList filelist = getFileList();
        //1.  OkHttpClient  
        OkHttpClient okHttpClient = new OkHttpClient();
        MultipartBody.Builder multipartBody = new MultipartBody.Builder().setType(MultipartBody.FORM);
        for (int i = 0; i < filelist.size(); i++) {
            String path = filelist.get(i);
            File file = new File(path);
            String fileMimeType = getMimeType(file);
            //        ,      
            MediaType mediaType = MediaType.parse(fileMimeType);
            RequestBody fileBody = RequestBody.create(mediaType, file);
            multipartBody.addFormDataPart("file" + i, file.getName(), fileBody);
        }
        RequestBody requestBody = multipartBody.build();
        Request requestPostFile = new Request.Builder()
                .url(url)
                .post(requestBody)
                .build();
        Response response = null;
        try {
            response = okHttpClient.newCall(requestPostFile).execute();
            if (response.isSuccessful()) {
            } else {
                throw new IOException("Unexpected code " + response);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    

    参考博文
    https://www.jianshu.com/p/bb57bc65e4ce
    https://www.jianshu.com/p/b1cf0b574e74