okhttp3.4用法全解析,追趕okhttp的更新步伐
阿新 • • 發佈:2019-01-08
前言
第一次用okhttp的時候的版本號是2.x,當時看到github上也是2.x的版本,但現在重新去用okhttp的時候,發現有很多都不一樣了,這裡記錄一下okhttp的一些用法,以及遇到困難時的解決辦法
1.okhttp3的基本用法
1. 基本的配置
compile 'com.squareup.okhttp3:okhttp:+'
注意,這裡使用的是最新版本的okhttp,我們就是要追趕人家的開發步伐
如果你想就用一個的話,下面是
compile 'com.squareup.okhttp3:okhttp:3.4.1'
新增許可權:
<uses-permission android:name="android.permission.INTERNET"/>
//下面這些事使用到快取的時候需要用的
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
2.普通的get和post的方法
//普通的非同步的get請求
Request request = new Request.Builder()
.url("http://apis.baidu.com/heweather/weather/free?city=beijing")
.method("GET", null)//這行可省略
.header("apikey", CONSTS.apikey)
.build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Toast.makeText(getApplicationContext(), "請求失敗", Toast.LENGTH_SHORT).show();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
//這裡咱們先不講快取,到後面再講
str = response.toString()+"\n"+response.headers()+"\n"+response.body().string();
Log.i("response", str + "");
//回撥不是在主執行緒,所以更新ui需要到主執行緒
runOnUiThread(new Runnable() {
@Override
public void run() {
text.setText(str+"");
}
});
}
});
普通的post表單請求
//非同步post
public void POST(View view) {
//新增表單內容
RequestBody formBody = new FormBody.Builder()
.add("city", "beijing")
.build();
//多項內容,這個是傳多種引數的的
RequestBody multiformBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("title", "Square Logo")
.addFormDataPart("image", "logo-square.png",
RequestBody.create(MEDIA_TYPE_PNG, new File("website/static/logo-square.png")))
.build();
Request request = new Request.Builder()
.url("http://apis.baidu.com/heweather/weather/free")
.header("apikey", CONSTS.apikey)
.post(formBody)
.build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
str = response.toString()+"\n"+response.headers()+"\n"+response.body().string();
Log.i("response", str + "");
runOnUiThread(new Runnable() {
@Override
public void run() {
text.setText(str+"");
}
});
}
});
}
在這裡請注意,get請求和2.x的內容變化不是很大,post內容的時候新增屬性值的時候引數變了,OkHttp3非同步POST請求和OkHttp2.x有一些差別就是沒有FormEncodingBuilder這個類,替代它的是功能更加強大的FormBody和MultipartBody,這兩個的類的用法都是builder,和Request的用法相似
3. 上傳檔案
。。。
4.下載檔案
。。。