在應用開發中確定會用到網絡請求,下面讓咱們一塊兒瞭解OkHttp3這個網絡請求框架吧。git
Module的build.gradle文件中引入:github
dependencies { compile 'com.squareup.okhttp3:okhttp:3.12.1' }
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請求,和上面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();
最近我會寫不少關於Android經常使用控件的使用,裏面都是一些頗有用的知識,若是你感受有用,請給我一個star,謝謝。代碼實例異步