![【移動(dòng)應(yīng)用開發(fā)技術(shù)】Android中OkHttpUtils如何使用_第1頁](http://file4.renrendoc.com/view/3a8198507e1ea8129215958c89a5b4f9/3a8198507e1ea8129215958c89a5b4f91.gif)
![【移動(dòng)應(yīng)用開發(fā)技術(shù)】Android中OkHttpUtils如何使用_第2頁](http://file4.renrendoc.com/view/3a8198507e1ea8129215958c89a5b4f9/3a8198507e1ea8129215958c89a5b4f92.gif)
![【移動(dòng)應(yīng)用開發(fā)技術(shù)】Android中OkHttpUtils如何使用_第3頁](http://file4.renrendoc.com/view/3a8198507e1ea8129215958c89a5b4f9/3a8198507e1ea8129215958c89a5b4f93.gif)
![【移動(dòng)應(yīng)用開發(fā)技術(shù)】Android中OkHttpUtils如何使用_第4頁](http://file4.renrendoc.com/view/3a8198507e1ea8129215958c89a5b4f9/3a8198507e1ea8129215958c89a5b4f94.gif)
![【移動(dòng)應(yīng)用開發(fā)技術(shù)】Android中OkHttpUtils如何使用_第5頁](http://file4.renrendoc.com/view/3a8198507e1ea8129215958c89a5b4f9/3a8198507e1ea8129215958c89a5b4f95.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
【移動(dòng)應(yīng)用開發(fā)技術(shù)】Android中OkHttpUtils如何使用
Android中OkHttpUtils如何使用,相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。引入:AndroidStudio使用前,對于AndroidStudio的用戶,可以選擇添加:compile
project(':okhttputils')或者compile
'com.zhy:okhttputils:2.0.0'二、基本用法目前基本的用法格式為:OkHttpUtils
.get()
.url(url)
.addParams("username",
"hyman")
.addParams("password",
"123")
.build()
.execute(callback);通過鏈?zhǔn)饺ジ鶕?jù)自己的需要添加各種參數(shù),最后調(diào)用execute(callback)進(jìn)行執(zhí)行,傳入callback則代表是異步。如果單純的execute()則代表同步的方法調(diào)用。可以看到,取消了之前一堆的get重載方法,參數(shù)也可以進(jìn)行靈活的選擇了。下面簡單看一下,全部的用法:(1)GET請求String
url
=
"/";
OkHttpUtils
.get()
.url(url)
.addParams("username",
"hyman")
.addParams("password",
"123")
.build()
.execute(new
StringCallback()
{
@Override
public
void
onError(Request
request,
Exception
e)
{
}
@Override
public
void
onResponse(String
response)
{
}
});(2)POST請求
OkHttpUtils
.post()
.url(url)
.addParams("username",
"hyman")
.addParams("password",
"123")
.build()
.execute(callback);(3)PostStringOkHttpUtils
.postString()
.url(url)
.content(new
Gson().toJson(new
User("zhy",
"123")))
.build()
.execute(new
MyStringCallback());將string作為請求體傳入到服務(wù)端,例如json字符串。(4)PostFileOkHttpUtils
.postFile()
.url(url)
.file(file)
.build()
.execute(new
MyStringCallback());將file作為請求體傳入到服務(wù)端.(5)基于POST的文件上傳(類似web上的表單)OkHttpUtils.post()//
.addFile("mFile",
"messenger_01.png",
file)//
.addFile("mFile",
"test1.txt",
file2)//
.url(url)
.params(params)//
.headers(headers)//
.build()//
.execute(new
MyStringCallback());(6)下載文件OkHttpUtils//
.get()//
.url(url)//
.build()//
.execute(new
FileCallBack(Environment.getExternalStorageDirectory().getAbsolutePath(),
"gson-2.2.1.jar")//
{
@Override
public
void
inProgress(float
progress)
{
mProgressBar.setProgress((int)
(100
*
progress));
}
@Override
public
void
onError(Request
request,
Exception
e)
{
Log.e(TAG,
"onError
:"
+
e.getMessage());
}
@Override
public
void
onResponse(File
file)
{
Log.e(TAG,
"onResponse
:"
+
file.getAbsolutePath());
}
});(7)顯示圖片OkHttpUtils
.get()//
.url(url)//
.build()//
.execute(new
BitmapCallback()
{
@Override
public
void
onError(Request
request,
Exception
e)
{
mTv.setText("onError:"
+
e.getMessage());
}
@Override
public
void
onResponse(Bitmap
bitmap)
{
mImageView.setImageBitmap(bitmap);
}
});哈,目前來看,清晰多了。三、對于上傳下載的回調(diào)new
Callback<?>()
{
//...
@Override
public
void
inProgress(float
progress)
{
//use
progress:
0
~
1
}
}對于傳入的callback有個(gè)inProgress方法,需要拿到進(jìn)度直接復(fù)寫該方法即可。四、對于自動(dòng)解析為實(shí)體類目前去除了Gson的依賴,提供了自定義Callback的方式,讓用戶自己去解析返回的數(shù)據(jù),目前提供了StringCallback,F(xiàn)ileCallback,BitmapCallback分別用于返回string,文件下載,加載圖片。當(dāng)然如果你希望解析為對象,你可以:public
abstract
class
UserCallback
extends
Callback<User>
{
//非UI線程,支持任何耗時(shí)操作
@Override
public
User
parseNetworkResponse(Response
response)
throws
IOException
{
String
string
=
response.body().string();
User
user
=
new
Gson().fromJson(string,
User.class);
return
user;
}
}自己使用自己喜歡的Json解析庫完成即可。解析成List<User>,則如下:public
abstract
class
ListUserCallback
extends
Callback<List<User>>
{
@Override
public
List<User>
parseNetworkResponse(Response
response)
throws
IOException
{
String
string
=
response.body().string();
List<User>
user
=
new
Gson().fromJson(string,
List.class);
return
user;
}
}五、對于https單向認(rèn)證非常簡單,拿到xxx.cert的證書。然后調(diào)用OkHttpUtils.getInstance()
.setCertificates(inputstream);建議使用方式,例如我的證書放在assets目錄:/**
*
Created
by
zhy
on
15/8/25.
*/
public
class
MyApplication
extends
Application
{
@Override
public
void
onCreate()
{
super.onCreate();
try
{
OkHttpUtils
.getInstance()
.setCertificates(getAssets().open("aaa.cer"),
getAssets().open("server.cer"));
}
catch
(IOException
e)
{
e.printStackTrace();
}
}
}即可。別忘了注冊Application。注意:如果https網(wǎng)站為權(quán)威機(jī)構(gòu)頒發(fā)的證書,不需要以上設(shè)置。自簽名的證書才需要。六、配置(1)全局配置可以在Application中,通過:OkHttpClient
client
=
OkHttpUtils.getInstance().getOkHttpClient();然后調(diào)用client的各種set方法。例如:client.setConnectTimeout(100000,
TimeUnit.MILLISECONDS);(2)為單個(gè)請求設(shè)置超時(shí)比如涉及到文件的需要設(shè)置讀寫等待時(shí)間多一點(diǎn)。OkHttpUtils
.get()//
.url(url)//
.tag(this)//
.build()//
.connTimeOut(20000)
.readTimeOut(20000)
.writeTimeOut(20000)
.execute()調(diào)用build()之后,可以隨即設(shè)置各種timeOut.(3)取消單個(gè)請求
RequestCall
call
=
OkHttpUtils.get().url(url).build();
call.cancel()(4)根據(jù)tag取消請求目前對于支持的方法都添加了最后一個(gè)參數(shù)Objecttag,取消則通過OkHttpUtils.cancelTag(tag)執(zhí)行。例如:在Activity中,當(dāng)Activity銷毀取消請求:OkHttpUtils
.get()//
.url(url)//
.tag(this)//
.build()//
@Override
protected
void
onDestroy()
{
super.onDestroy();
//可以取消同一個(gè)tag的
OkHttpUtils.cancelTag(this);//取消以Activity.this作為tag的請求
}比如,當(dāng)前Activity頁面所有的請求以Activity對象作為tag,可以在onDestory里面統(tǒng)一取消。七、淺談封裝其實(shí)整個(gè)封裝的過程比較簡單,這里簡單描述下,對于okhttp一個(gè)請求的流程大致是這樣的://創(chuàng)建okHttpClient對象
OkHttpClient
mOkHttpClient
=
new
OkHttpClient();
//創(chuàng)建一個(gè)Request
final
Request
request
=
new
Request.Builder()
.url("/hongyangAndroid")
.build();
//new
call
Call
call
=
mOkHttpClient.newCall(request);
//請求加入調(diào)度
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();
}
});其中主要的差異,其實(shí)就是request的構(gòu)建過程。我對Request抽象了一個(gè)類:OkHttpRequestpublic
abstract
class
OkHttpRequest
{
protected
RequestBody
requestBody;
protected
Request
request;
protected
String
url;
protected
String
tag;
protected
Map<String,
String>
params;
protected
Map<String,
String>
headers;
protected
OkHttpRequest(String
url,
String
tag,
Map<String,
String>
params,
Map<String,
String>
headers)
{
this.url
=
url;
this.tag
=
tag;
this.params
=
params;
this.headers
=
headers;
}
protected
abstract
Request
buildRequest();
protected
abstract
RequestBody
buildRequestBody();
protected
void
prepareInvoked(ResultCallback
callback)
{
requestBody
=
buildRequestBody();
requestBody
=
wrapRequestBody(requestBody,
callback);
request
=
buildRequest();
}
protected
Reques
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度酒店人力資源總監(jiān)聘用勞動(dòng)合同樣本
- 2025年度生物科技研發(fā)項(xiàng)目股權(quán)投資協(xié)議
- 2025年度卷簾門電機(jī)銷售與售后服務(wù)標(biāo)準(zhǔn)合同
- 2025年度工程地質(zhì)勘察與評(píng)價(jià)合同協(xié)議書
- 2025年度沿海集裝箱貨運(yùn)代理與貨物裝卸服務(wù)合同
- 2025年度股權(quán)轉(zhuǎn)讓與稅收籌劃協(xié)議書
- 2025年度精裝修房屋買賣合同電子檔案管理服務(wù)合同
- 醫(yī)院合同申請書
- 加入國旗護(hù)衛(wèi)隊(duì)申請書
- 用數(shù)據(jù)說話提升您企業(yè)年報(bào)的交互式信息呈現(xiàn)能力
- 《急性心力衰竭的急救處理》課件
- 小學(xué)六年級(jí)數(shù)學(xué)上冊《簡便計(jì)算》練習(xí)題(310題-附答案)
- 青海省西寧市海湖中學(xué)2025屆中考生物仿真試卷含解析
- 2024年河南省《輔警招聘考試必刷500題》考試題庫及答案【全優(yōu)】
- -情景交際-中考英語復(fù)習(xí)考點(diǎn)
- 安全隱患報(bào)告和舉報(bào)獎(jiǎng)勵(lì)制度
- 地理標(biāo)志培訓(xùn)課件
- 2023行政主管年終工作報(bào)告五篇
- 2024年中國養(yǎng)老產(chǎn)業(yè)商學(xué)研究報(bào)告-銀發(fā)經(jīng)濟(jì)專題
- 高教版2023年中職教科書《語文》(基礎(chǔ)模塊)下冊教案全冊
- 人教版英語七年級(jí)上冊閱讀理解專項(xiàng)訓(xùn)練16篇(含答案)
評(píng)論
0/150
提交評(píng)論