【移动应用开发技术】Android中OkHttpUtils如何使用_第1页
【移动应用开发技术】Android中OkHttpUtils如何使用_第2页
【移动应用开发技术】Android中OkHttpUtils如何使用_第3页
【移动应用开发技术】Android中OkHttpUtils如何使用_第4页
【移动应用开发技术】Android中OkHttpUtils如何使用_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】Android中OkHttpUtils如何使用

Android中OkHttpUtils如何使用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。引入: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);通过链式去根据自己的需要添加各种参数,最后调用execute(callback)进行执行,传入callback则代表是异步。如果单纯的execute()则代表同步的方法调用。可以看到,取消了之前一堆的get重载方法,参数也可以进行灵活的选择了。下面简单看一下,全部的用法:(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作为请求体传入到服务端,例如json字符串。(4)PostFileOkHttpUtils

.postFile()

.url(url)

.file(file)

.build()

.execute(new

MyStringCallback());将file作为请求体传入到服务端.(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);

}

});哈,目前来看,清晰多了。三、对于上传下载的回调new

Callback<?>()

{

//...

@Override

public

void

inProgress(float

progress)

{

//use

progress:

0

~

1

}

}对于传入的callback有个inProgress方法,需要拿到进度直接复写该方法即可。四、对于自动解析为实体类目前去除了Gson的依赖,提供了自定义Callback的方式,让用户自己去解析返回的数据,目前提供了StringCallback,FileCallback,BitmapCallback分别用于返回string,文件下载,加载图片。当然如果你希望解析为对象,你可以:public

abstract

class

UserCallback

extends

Callback<User>

{

//非UI线程,支持任何耗时操作

@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单向认证非常简单,拿到xxx.cert的证书。然后调用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网站为权威机构颁发的证书,不需要以上设置。自签名的证书才需要。六、配置(1)全局配置可以在Application中,通过:OkHttpClient

client

=

OkHttpUtils.getInstance().getOkHttpClient();然后调用client的各种set方法。例如:client.setConnectTimeout(100000,

TimeUnit.MILLISECONDS);(2)为单个请求设置超时比如涉及到文件的需要设置读写等待时间多一点。OkHttpUtils

.get()//

.url(url)//

.tag(this)//

.build()//

.connTimeOut(20000)

.readTimeOut(20000)

.writeTimeOut(20000)

.execute()调用build()之后,可以随即设置各种timeOut.(3)取消单个请求

RequestCall

call

=

OkHttpUtils.get().url(url).build();

call.cancel()(4)根据tag取消请求目前对于支持的方法都添加了最后一个参数Objecttag,取消则通过OkHttpUtils.cancelTag(tag)执行。例如:在Activity中,当Activity销毁取消请求:OkHttpUtils

.get()//

.url(url)//

.tag(this)//

.build()//

@Override

protected

void

onDestroy()

{

super.onDestroy();

//可以取消同一个tag的

OkHttpUtils.cancelTag(this);//取消以Activity.this作为tag的请求

}比如,当前Activity页面所有的请求以Activity对象作为tag,可以在onDestory里面统一取消。七、浅谈封装其实整个封装的过程比较简单,这里简单描述下,对于okhttp一个请求的流程大致是这样的://创建okHttpClient对象

OkHttpClient

mOkHttpClient

=

new

OkHttpClient();

//创建一个Request

final

Request

request

=

new

Request.Builder()

.url("/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();

}

});其中主要的差异,其实就是request的构建过程。我对Request抽象了一个类: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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论