OKHTTP3的簡單使用
使用okhttp3需引入以下依賴
compile 'com.squareup.okio:okio:1.13.0'
compile 'com.squareup.okhttp3:okhttp:3.9.0'
1.okhttp GET方式請求
//創建OkHttpClient對象
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10,TimeUnit.SECONDS)
.readTimeout(20, TimeUnit.SECONDS)
.build();
final Request request = new Request.Builder()
.url("http://172.20.192.168:8080/getbookByFrom?name=android基礎&price=50")//請求的url
.get()//設置請求方式,get()/post() 查看Builder()方法知,在構建時默認設置請求方式爲GET
.build(); //構建一個請求Request對象
//創建/Call
Call call = okHttpClient.newCall(request);
//加入隊列 異步操作
call.enqueue(new Callback() {
//請求錯誤回調方法
@Override
public void onFailure(Call call, IOException e) {
System.out.println("連接失敗");
}
//異步請求(非主線程)
@Override
public void onResponse(Call call, Response response) throws IOException {
if(response.code()==200) {
System.out.println(response.body().string());
}
});
注:在okhttp3中 如果想設置超時時間直接通過OkHttpClient 對象來設置
okHttpClient .setConnectTimeout(10, TimeUnit.SECONDS);
okHttpClient .setWriteTimeout(10, TimeUnit.SECONDS);
okHttpClient .setReadTimeout(20, TimeUnit.SECONDS);
但okhttp3OkHttpClient 對象沒有這個方法,需要藉助new OkHttpClient.Builder()按照上面的方法設置超時時間。
2.okhttp POST方式請求(提交表單方式)
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10,TimeUnit.SECONDS)
.readTimeout(20, TimeUnit.SECONDS)
.build();
//post方式提交的數據
FormBody formBody = new FormBody.Builder()
.add("name", "android基礎")
.add("price", "50")
.build();
final Request request = new Request.Builder()
.url("http://172.20.192.168:8080/getbookByFrom")//請求的url
.post(formBody)
.build();
//創建/Call
Call call = okHttpClient.newCall(request);
//加入隊列 異步操作
call.enqueue(new Callback() {
//請求錯誤回調方法
@Override
public void onFailure(Call call, IOException e) {
System.out.println("連接失敗");
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if(response.code()==200) {
System.out.println(response.body().string());
}
}
});
3.okhttp POST方式請求(提交json方式)
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10,TimeUnit.SECONDS)
.readTimeout(20, TimeUnit.SECONDS)
.build();
Book book = new Book();
book.setName("android基礎");
book.setPrice(59);
//使用Gson 添加 依賴 compile 'com.google.code.gson:gson:2.8.1'
Gson gson = new Gson();
//使用Gson將對象轉換爲json字符串
String json = gson.toJson(book);
//MediaType 設置Content-Type 標頭中包含的媒體類型值
RequestBody requestBody = FormBody.create(MediaType.parse("application/json; charset=utf-8")
, json);
Request request = new Request.Builder()
.url("http://172.20.192.168:8080/getbookByJson")//請求的url
.post(requestBody)
.build();
//創建/Call
Call call = okHttpClient.newCall(request);
//加入隊列 異步操作
call.enqueue(new Callback() {
//請求錯誤回調方法
@Override
public void onFailure(Call call, IOException e) {
System.out.println("連接失敗");
}
@Override
public void onResponse(Call call, Response response) throws IOException {
System.out.println(response.body().string());
}
});