Okhttp的簡單使用

??????? 現(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;

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,534評論 19 139
  • //get 請求 private void get() { OkHttpClient okHttpClient =...
    NeWolf閱讀 639評論 0 0
  • 參考Android網(wǎng)絡(luò)請求心路歷程Android Http接地氣網(wǎng)絡(luò)請求(HttpURLConnection) 一...
    合肥黑閱讀 21,697評論 7 63
  • 參考o(jì)khttp官方wiki https://github.com/square/okhttp/wiki/Call...
    WangGavin閱讀 7,286評論 0 1
  • 五月靜音。 丁香花的淡紫色,相對某些聲色大得多的紫色,已經(jīng)是娓娓低語群山的起伏調(diào)至靜音。雷聲不再呵斥寂靜。月光在坎...
    太陽格言閱讀 362評論 0 0

友情鏈接更多精彩內(nèi)容