最近在群裏聽到各種討論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