版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 云安全架构与数据保护策略-深度研究
- 权限管理框架研究-深度研究
- 智慧城市技术与治理模式创新-深度研究
- 2025年应天职业技术学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 2025年庆阳职业技术学院高职单招职业适应性测试近5年常考版参考题库含答案解析
- 有机光电子材料开发-深度研究
- 2025年广东轻工职业技术学院高职单招高职单招英语2016-2024历年频考点试题含答案解析
- 2025年平顶山文化艺术职业学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 2025年山东旅游职业学院高职单招高职单招英语2016-2024历年频考点试题含答案解析
- 教育-工作错配对劳动收入的影响研究
- 2023-2024学年度人教版一年级语文上册寒假作业
- 软件运维考核指标
- 空气动力学仿真技术:格子玻尔兹曼方法(LBM)简介
- 对表达方式进行选择与运用
- GB/T 18488-2024电动汽车用驱动电机系统
- 投资固定分红协议
- 高二物理题库及答案
- 职业发展展示园林
- 七年级下册英语单词默写表直接打印
- 2024版医疗安全不良事件培训讲稿
- 中学英语教学设计PPT完整全套教学课件
评论
0/150
提交评论