
老婆保佑,代碼無BUG
目錄
- 引用
- 基礎(chǔ)用法
- GET
- post
- 使用FormBody傳遞鍵值對(duì)參數(shù)
- 使用RequestBody傳遞Json或File對(duì)象
- 使用MultipartBody同時(shí)傳遞鍵值對(duì)參數(shù)和File對(duì)象
- 自定義RequestBody實(shí)現(xiàn)流的上傳
- 設(shè)置請求頭
- 下載文件
- 封裝
一.引用
compile 'com.squareup.okhttp3:okhttp:3.8.1'
二.基礎(chǔ)用法
GET
private void initget() {
//創(chuàng)建okHttpClient對(duì)象
OkHttpClient mOkHttpClient = new OkHttpClient();
//創(chuàng)建一個(gè)Request
final Request request = new Request.Builder()
.url("http://apis.juhe.cn/mobile/get?phone=18856907654&key=5778e9d9cf089fc3b093b162036fc0e1")
.build();
//new call
Call call = mOkHttpClient.newCall(request);
//請求加入調(diào)度
call.enqueue(new Callback() {
@Override
public void onFailure(@NonNull Call call, IOException e) {
}
@Override
public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
if (response.isSuccessful()) {//回調(diào)的方法執(zhí)行在子線程。
String htmlStr = response.body().string();
Logger.e("htmlStr--->" + htmlStr);
Logger.e("response.code()==" + response.code());
}
}
});
}
POST
(1)使用FormBody傳遞鍵值對(duì)參數(shù)
private void initPost() {
OkHttpClient client = new OkHttpClient();//創(chuàng)建OkHttpClient對(duì)象。
FormBody.Builder formBody = new FormBody.Builder();//創(chuàng)建表單請求體
formBody.add("phone", "18856907654");//傳遞鍵值對(duì)參數(shù)
formBody.add("key", "5778e9d9cf089fc3b093b162036fc0e1");//傳遞鍵值對(duì)參數(shù)
Request request = new Request.Builder()//創(chuàng)建Request 對(duì)象。
.url("http://apis.juhe.cn/mobile/get")
.post(formBody.build())//傳遞請求體
.build();
}
(2)使用RequestBody傳遞Json或File對(duì)象
private void initPost1() {
OkHttpClient client = new OkHttpClient();//創(chuàng)建OkHttpClient對(duì)象。
MediaType JSON = MediaType.parse("application/json; charset=utf-8");//數(shù)據(jù)類型為json格式,
String jsonStr = "{\"phone\":\"18856907654\",\"key\":\"5778e9d9cf089fc3b093b162036fc0e1\"}";//json數(shù)據(jù).
RequestBody body = RequestBody.create(JSON, jsonStr);
Request request = new Request.Builder()
.url("http://apis.juhe.cn/mobile/get")
.post(body)
.build();
}
(3) 使用MultipartBody同時(shí)傳遞鍵值對(duì)參數(shù)和File對(duì)象
private void initPost2() {
OkHttpClient client = new OkHttpClient();
MultipartBody multipartBody =new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("phone","18856907654")//添加鍵值對(duì)參數(shù)
.addFormDataPart("key","5778e9d9cf089fc3b093b162036fc0e1")
// .addFormDataPart("file","fileName",RequestBody.create(MediaType.parse("file/*"), new File("/user/allens/desktop/meinv.png")))//添加文件
.build();
final Request request = new Request.Builder()
.url("http://apis.juhe.cn/mobile/get")
.post(multipartBody)
.build();
(4)自定義RequestBody實(shí)現(xiàn)流的上傳
private void initPost3() {
RequestBody body = new RequestBody() {
@Override
public MediaType contentType() {
return null;
}
@Override
public void writeTo(BufferedSink sink) throws IOException {//重寫writeTo方法
FileInputStream fio = new FileInputStream(new File("fileName"));
byte[] buffer = new byte[1024 * 8];
if (fio.read(buffer) != -1) {
sink.write(buffer);
}
}
};
OkHttpClient client = new OkHttpClient();//創(chuàng)建OkHttpClient對(duì)象。
Request request = new Request.Builder()
.url("http://www.baidu.com")
.post(body)
.build();
}
三.設(shè)置請求頭
Request request = new Request.Builder()
.url("http://www.baidu.com")
.header("User-Agent", "OkHttp Headers.java")
.addHeader("token", "myToken")
.build();
四.下載文件
在OKHttp中并沒有提供下載文件的功能,但是在Response中可以獲取流對(duì)象,有了流對(duì)象我們就可以自己實(shí)現(xiàn)文件的下載。代碼如下:
這段代碼寫在回調(diào)接口CallBack的onResponse方法中:
InputStream is = response.body().byteStream();//從服務(wù)器得到輸入流對(duì)象