當前位置:編程學習大全網 - 源碼下載 - 為什麽okhttpclient不能builder

為什麽okhttpclient不能builder

壹、概述

最近在群裏聽到各種討論ok/hongyangAndroid/okpile 'com.squareup.okpile 'com.squareup.okio:okio:1.5.0'

最新的jar地址:okio the latest JAR

二、使用教程

(壹)Http Get

對了網絡加載庫,那麽最常見的肯定就是/hongyangAndroid")

.build();

//new call

Call call = mOkHttpClient.newCall(request);

//請求加入調度

call.enqueue(new Callback()

{

@Override

public void onFailure(Request request, IOException e)

{

}

@Override

public void onResponse(final Response response) throws IOException

{

//String htmlStr = response.body().string();

}

});

123456789101112131415161718192021222324

以上就是發送壹個get請求的步驟,首先構造壹個Request對象,參數最起碼有個url,當然妳可以通過Request.Builder設置更多的參數比如:header、method等。

然後通過request的對象去構造得到壹個Call對象,類似於將妳的請求封裝成了任務,既然是任務,就會有execute()和cancel()等方法。

最後,我們希望以異步的方式去執行請求,所以我們調用的是call.enqueue,將call加入調度隊列,然後等待任務執行完成,我們在Callback中即可得到結果。

看到這,妳會發現,整體的寫法還是比較長的,所以封裝肯定是要做的,不然每個請求這麽寫,得累死。

ok,需要註意幾點:

onResponse回調的參數是response,壹般情況下,比如我們希望獲得返回的字符串,可以通過response.body().string()獲取;如果希望獲得返回的二進制字節數組,則調用response.body().bytes();如果妳想拿到返回的inputStream,則調用response.body().byteStream()

看到這,妳可能會奇怪,竟然還能拿到返回的inputStream,看到這個最起碼能意識到壹點,這裏支持大文件下載,有inputStream我們就可以通過IO的方式寫文件。不過也說明壹個問題,這個onResponse執行的線程並不是UI線程。的確是的,如果妳希望操作控件,還是需要使用handler等,例如:

@Override

public void onResponse(final Response response) throws IOException

{

final String res = response.body().string();

runOnUiThread(new Runnable()

{

@Override

public void run()

{

mTv.setText(res);

}

});

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

我們這裏是異步的方式去執行,當然也支持阻塞的方式,上面我們也說了Call有壹個execute()方法,妳也可以直接調用call.execute()通過返回壹個Response。

(二) Http Post 攜帶參數

看來上面的簡單的get請求,基本上整個的用法也就掌握了,比如post攜帶參數,也僅僅是Request的構造的不同。

Request request = buildMultipartFormRequest(

url, new File[]{file}, new String[]{fileKey}, null);

FormEncodingBuilder builder = new FormEncodingBuilder();

builder.add("username","張鴻洋");

Request request = new Request.Builder()

.url(url)

.post(builder.build())

.build();

mOkHttpClient.newCall(request).enqueue(new Callback(){});12345678910

大家都清楚,post的時候,參數是包含在請求體中的;所以我們通過FormEncodingBuilder。添加多個String鍵值對,然後去構造RequestBody,最後完成我們Request的構造。

後面的就和上面壹樣了。

(三)基於Http的文件上傳

接下來我們在介紹壹個可以構造RequestBody的Builder,叫做MultipartBuilder。當我們需要做類似於表單上傳的時候,就可以使用它來構造我們的requestBody。

File file = new File(Environment.getExternalStorageDirectory(), "balabala.mp4");

RequestBody fileBody = RequestBody.create(MediaType.parse("application/octet-stream"), file);

RequestBody requestBody = new MultipartBuilder()

.type(MultipartBuilder.FORM)

.addPart(Headers.of(

"Content-Disposition",

"form-data; name=\"username\""),

RequestBody.create(null, "張鴻洋"))

.addPart(Headers.of(

"Content-Disposition",

"form-data; name=\"mFile\";

filename=\"wjd.mp4\""), fileBody)

.build();

Request request = new Request.Builder()

.url("/lmj623565791/article/details/47911083

  • 上一篇:如何計算主力倉位?
  • 下一篇:什麽是軟交換呼叫中心系統?
  • copyright 2024編程學習大全網