Android OkHttpの使い方

5572 ワード

前言
GoogleはAndroid 6.0バージョンでHttpClient関連APIを削除したため、ネットアクセスではOKHttpも流行しており、最近暇なうちに各道大神のOKHttpに関する記事を参考に、その使用心得をまとめてみましょう.
OKHttp依存パッケージリンク(https://search.maven.org/remote_content?g=com.squareup.okhttp&a=okhttp&v=LATEST)をクリックしてダウンロード
OkHttp内部依存パッケージokioリンク(https://search.maven.org/remote_content?g=com.squareup.okio&a=okio&v=LATEST)をクリックしてダウンロード 、Http Get
public void httpGet() {
        //   okHttpClient  
        OkHttpClient mOkHttpClient = new OkHttpClient();
        //     Request
        final Request request = new Request.Builder()
                .url("http://blog.csdn.net/android_mnbvcxz")
                .get()
                .build();
        // new call
        Call call = mOkHttpClient.newCall(request);
        //       
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Request request, IOException e) {
            }

            @Override
            public void onResponse(final Response response) throws IOException {
                // String htmlStr = response.body().string();
            }
        });
    }

以上、getリクエストを送信する手順を示します.
1.パラメータが少なくともurlであるRequestオブジェクトを作成してもよいし、Requestを通過してもよい.Builderはheader、mehodなど、より多くのパラメータを設定します.
2.requestのオブジェクトを構築してCallオブジェクトを得ることは、リクエストがタスクにカプセル化され、execute()やcancel()などの方法を持つことである.
3.最後に要求を非同期で実行するのでcallを呼び出す.Enqueueは、callをスケジューリングキューに追加し、タスクの実行が完了するのを待ってCallBackで結果を得ることができます.
に注意
1.onResponseコールバックのパラメータはresponseであり、一般的には、例えば、response.body().string()で取得できる戻り文字列を取得したい.返されるバイナリバイト配列を取得する場合、response.body().bytes()が呼び出される.戻るinputStreamを取得したい場合は、response.body().byteStream();を呼び出します.2. , , Call execute()メソッドでは、call.execute()を び すこともできます.Responseを すこともできます.
、Http Post
       //post     
       public void httpPost() {
        //   okHttpClient  
        OkHttpClient mOkHttpClient = new OkHttpClient();
        FormEncodingBuilder builder = new FormEncodingBuilder();
        //   RequestBody
        RequestBody requestBody = builder
                .add("username", "   ")
                .add("password", "  ")
                .build();
        //     Request
        Request request = new Request.Builder()
                .url("http://blog.csdn.net/android_mnbvcxz")
                .post(requestBody)
                .build();

        //       
        mOkHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Request request, IOException e) {
            }

            @Override
            public void onResponse(final Response response) throws IOException {
                // String htmlStr = response.body().string();
            }
        });
    }

      //post     
    public void httpPostString() {
        //   okHttpClient  
        OkHttpClient mOkHttpClient = new OkHttpClient();
        //   RequestBody
        RequestBody requestBody = RequestBody
                .create(MediaType.parse("text/plain;chaset=utf-8"),"'username':'   ','passwored':'  '");
        //     Request
        Request request = new Request.Builder()
                .url("http://blog.csdn.net/android_mnbvcxz")
                .post(requestBody)
                .build();

        //       
        mOkHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Request request, IOException e) {
            }

            @Override
            public void onResponse(final Response response) throws IOException {
                // String htmlStr = response.body().string();
            }
        });
    }

      //post  File
      public void httpPostFile() {
        //1、   okHttpClient  
        OkHttpClient mOkHttpClient = new OkHttpClient();
        //2、  RequestBody
        File file = new File(Environment.getExternalStorageDirectory(),"banner.jpg");
        if (!file.exists()) {
            Log.e("error_tag", file.getAbsolutePath() + "not exist!");
            return;
        }
        //mime type
        RequestBody fileBody=RequestBody.create(MediaType.parse("application/octet-stream"), file);

        //3、    Request
        Request request = new Request.Builder()
                        .url("http://blog.csdn.net/android_mnbvcxz").post(fileBody)
                        .build();
        //4、      
        mOkHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Request request, IOException e) {
            }

            @Override
            public void onResponse(final Response response) throws IOException {
                // String htmlStr = response.body().string();
            }
        });
    } 

ここでpostリクエストはパラメータを しているが,Requestの の いにすぎない.
1.httpPost()メソッドでは、パラメータは に まれる.FormEncodingBuilderを じて のStringキーの ペアを し、RequestBodyを し、Requestの を します.
2.httpPostString()のメソッドではパラメータは であるため、FormEncodingBuilderというコンストラクタモードは であり、Requestbodyの メソッドcreateを するだけでよい.
3.httpPostFile()メソッドではファイルを1つだけコミットするので、httpPostString()と にRequestbodyを した メソッドcreateを します

Requestbodyの メソッドcreateを する の、ファイルタイプのMediaTypeが な は、この を してください.http://blog.csdn.net/android_mnbvcxz/article/details/65441571クリックしてリンクを く