??????? 現(xiàn)在市面上比較火熱的Android網(wǎng)絡(luò)框架,就我知道的,volley,okhttp,retrofit+rxjava,當(dāng)然rxjava不算是網(wǎng)絡(luò)框架,只是配合retofit使用更為方便,volley是我使用得比較多的一個網(wǎng)絡(luò)框架,但是用他來做輕量的數(shù)據(jù)請求自是沒問題,但是在下載和上傳文件上,似乎就會暴露一些問題,啥問題我也不知道,因?yàn)槲抑皇遣锁B,這些東西也是一個自己的理解,如果有錯誤的地方,勿噴。
???????? 下面就進(jìn)入正題,本來我是想使用retrofit,但是我又想一口吃成胖子,對于rxjava的學(xué)習(xí)上堵住,所以轉(zhuǎn)戰(zhàn)okhttp,以下則是我對okhttp的一些理解和使用:
????????? 因?yàn)槲矣玫氖茿ndroid Studio,所以首先依賴
compile'com.squareup.okhttp3:okhttp:3.4.2'
? ,依賴完以后就可以使用了,首先:
private OkHttpClient okHttpClient;
private Request request;
private Call call;
因?yàn)椴还苁莋et請求,post請求,還是上傳下載文件,都需要這三個,總不能一個文件就新建一個對象吧,然后我在構(gòu)造函數(shù)中實(shí)例化了
public Http OkHttp() {
okHttpClient=new OkHttpClient();
}
,get請求如下:
public Call getOkhttp() {
???????????? request=new Request.Builder()
??????????????????????????????????????? ? ? ? ? ? ? ? .url(url)
??????????????????????????? ? ? ? ? ? ? ? ??????????? .build();
????????????? call=okHttpClient.newCall(request);
????????????? return call;
}
我是把call直接返回出來,這樣我用著舒服些, 正規(guī)寫法如下:
public void getOkhttp() {
request=newRequest.Builder()
.url(url)
.build();
call=okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call,IOException e) {
//這里面試請求錯誤調(diào)用
}
@Override
public void onResponse(Call call,Response response) throws IOException{
//這是是請求成功返回的
//得到返回信息則是 response.body().string()
}
});
}
,post請求如下:
public Call postOkhttp(RequestBody requestBody) {
request=new Request.Builder()
.url(url)
.post(requestBody)
.build();
call=okHttpClient.newCall(request);
return call;
}
鍵值對我是將其提取出來,定義如下:
RequestBody requestBody=new FormBody.Builder()
.add("key","valuse")
.build();
add方法則是往里面加入請求體,使用還是很簡單的,
上傳文件如下:
public Call FileOkhttp(String filename,String key) {
File file=new File(Environment.getExternalStorageDirectory(), filename);
RequestBody fileBody=RequestBody.create(MediaType.parse("application/octet-stream"),file);
RequestBody requestBody=new MultipartBody.Builder()
?????????????????????????????????????????????????????????????????????????????????????? .setType(MultipartBody.FORM)
?????????????????????????????????????????????????????????????????????????????????????? .addPart(Headers.of("Content-Disposition","form-data; name=\"username\""),
??????????????????????????????????????????????????????????????????????????????????????? RequestBody.create(null, key))//上傳文件名
??????????????????????????????????????????????????????????????????????????????????????? .addPart(Headers.of("Content-Disposition","form-data; name=\"mFile\"; filename =\"wjd.mp4\""),fileBody)
???????????????????????????????????????????????????????????????????????????????????????? .build();
request=new Request.Builder()
???????????????????????????????????????? .url(url)
????????????????????????????????????????? .post(requestBody)
?????????????????????????????????????????? .build();
call=okHttpClient.newCall(request);
return call;
}