初探OkHttp3

在應用開發中確定會用到網絡請求,下面讓咱們一塊兒瞭解OkHttp3這個網絡請求框架吧。git

  • 項目中引用

Module的build.gradle文件中引入:github

dependencies {
    compile 'com.squareup.okhttp3:okhttp:3.12.1'
}
  • 異步Get請求

OkHttpClient 是鏈接對象,不管是什麼請求,使用OKHttp都必需要建立這個對象。
Request 是請求對象的參數,裏面須要放置各類請求信息。
enqueue() 是使用異步請求方法。api

OkHttpClient client = new OkHttpClient();
    private void okhttpAsyncGet(){
      Request request = new Request.Builder()
                .url("https://api.apiopen.top/getJoke?page=1&count=2&type=video")
                .build();

       client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                Log.e("error",response.body().string());
            }
        });
    }
  • 異步Post請求

這裏咱們使用Post請求,和上面Get請求用的URL是同樣的。不一樣的是用Post請求須要使用RequestBody這個對象,用add()方法,添加咱們的請求參數。服務器

private void okhttpAsyncPost(){
        RequestBody formBody = new FormBody.Builder()
                .add("page", "1")
                .add("count", "2")
                .add("type","video")
                .build();
        Request request = new Request.Builder()
                .url("https://api.apiopen.top/getJoke")
                .post(formBody)
                .build();

        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                Log.e("error",response.body().string());
            }
        });
    }
  • 同步請求

同步請求的話,在Android開發中不是很經常使用,在主線程中是不能進行網絡請求的因此咱們這個要開一個子線程進行同步請求。
使用同步請求的是須要調用execute()方法,Response接收返回的對象。同步和異步請求只是最後一步的請求的方法不一樣而已。網絡

private Runnable runnable;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_okhttp);
        okhttpPost();
        new Thread(runnable).start();
    }
    private void okhttpPost()  {
        runnable = new Runnable(){
            @Override
            public void run() {
                try {

                    RequestBody formBody = new FormBody.Builder()
                            .add("page", "1")
                            .add("count", "2")
                            .add("type","video")
                            .build();

                    Request request = new Request.Builder()
                            .url("https://api.apiopen.top/getJoke")
                            .post(formBody)
                            .build();
                    Response response = client.newCall(request).execute();
                    Log.e("error",response.body().string());
                } catch (Exception e) {
                    Toast.makeText(OkhttpActivity.this,"異常",Toast.LENGTH_SHORT).show();
                    e.printStackTrace();
                }
            }
        };
    }
  • 響應超時設置

當請求服務器沒有反應時,這裏咱們能夠經過OkHttpClient 對象來設置請求響應超時。框架

OkHttpClient client = new OkHttpClient()
            .newBuilder()
            .connectTimeout(60, TimeUnit.SECONDS)
            .writeTimeout(60, TimeUnit.SECONDS)
            .readTimeout(60, TimeUnit.SECONDS)
            .build();

上面的URL都是可使用測試的。Ok,這樣咱們就能夠簡單快速上手OKHttp3了,後面會繼續講解OKHttp3的一些高級用法。

最近我會寫不少關於Android經常使用控件的使用,裏面都是一些頗有用的知識,若是你感受有用,請給我一個star,謝謝。代碼實例異步

相關文章
相關標籤/搜索