【移動(dòng)應(yīng)用開發(fā)技術(shù)】Android中OkHttpUtils如何使用_第1頁
【移動(dòng)應(yīng)用開發(fā)技術(shù)】Android中OkHttpUtils如何使用_第2頁
【移動(dòng)應(yīng)用開發(fā)技術(shù)】Android中OkHttpUtils如何使用_第3頁
【移動(dòng)應(yīng)用開發(fā)技術(shù)】Android中OkHttpUtils如何使用_第4頁
【移動(dòng)應(yīng)用開發(fā)技術(shù)】Android中OkHttpUtils如何使用_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論