Android网络请求框架之RetrofitWord文件下载.docx
- 文档编号:15292648
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:19
- 大小:23.21KB
Android网络请求框架之RetrofitWord文件下载.docx
《Android网络请求框架之RetrofitWord文件下载.docx》由会员分享,可在线阅读,更多相关《Android网络请求框架之RetrofitWord文件下载.docx(19页珍藏版)》请在冰豆网上搜索。
publicabstractclassRCallback<
T>
implementsretrofit.Callback<
{
@Override
publicabstractvoidsuccess(Tt,Responseresponse);
publicvoidfailure(RetrofitErrorerror){
Global.ProcException(error);
}
}
看到泛型T,估计大家就知道意味着什么了吧?
我们可以直接指定返回的对象了,不用再去解析json数据了!
3.封装请求的载体
publicclassRestAdapterFactory{
privateHashMap<
String,SoftReference<
RestAdapter>
>
adapters;
privatestaticvolatileRestAdapterFactorymaker;
privateRestAdapterFactory(){
adapters=newHashMap<
();
/**
*获取创建RestAdapter的工厂
*
*@return
*/
publicsynchronizedstaticRestAdapterFactorygetInstance(){
synchronized(RestAdapterFactory.class){
if(null==maker){
maker=newRestAdapterFactory();
returnmaker;
*创建RestAdapter
*@paramurl
publicsynchronizedRestAdapterbuild(finalStringurl){
//这就是发起请求的对象
RestAdapteradapter=null==adapters.get(url)?
null:
adapters.get(url).get();
if(null==adapter){
finalCellInfocellInfo=Utils.getCellInfo();
//添加一些header
RequestInterceptorrequestInterceptor=newRequestInterceptor(){
publicvoidintercept(RequestFacaderequest){
request.addHeader("
Authorization"
String.format("
Bearer%s"
MainApp.getToken()));
LoyoPlatform"
cellInfo.getLoyoPlatform());
LoyoAgent"
cellInfo.getLoyoAgent());
LoyoOSVersion"
cellInfo.getLoyoOSVersion());
LoyoVersionName"
Global.getVersionName());
LoyoVersionCode"
String.valueOf(Global.getVersion()));
};
//指定url,设置log级别,设置拦截器。
。
adapter=newRestAdapter.Builder().setEndpoint(url).setLogLevel(RestAdapter.LogLevel.FULL).setRequestInterceptor(requestInterceptor).build();
adapters.put(url,newSoftReference<
(adapter));
returnadapter;
对于这个类就不详细解释了,就是封装了RestAdapter,用于发起请求。
4.定义请求接口和发起请求
publicinterfaceITask{
@GET("
/task/{Id}"
)
voidgetTask(@Path("
Id"
)StringId,retrofit.Callback<
Task>
cb);
@DELETE("
voiddeleteTask(@Path("
@GET(FinalVariables.tasks+"
template/{id}"
voidgetTpl(@Path("
id"
)Stringid,Callback<
TaskTpl>
@DELETE(FinalVariables.tasks+"
voiddeleteTpl(@Path("
/task/query"
voidgetTasks(@QueryMapHashMap<
String,Object>
body,Callback<
PaginationX<
callback);
@POST("
/task"
voidcreate(@BodyHashMap<
body,retrofit.Callback<
先解释一下一些注解,其实也不用解释,看单词的意思大家也明白啦。
方法上的:
@PUT-修改,@DELETE-删除,@POST-创建,@GET-获取。
方法上的注解后面括号里的字符串就是这些请求指向的服务端地址,比如说服务器主地址是http:
//192.168.3.1:
9527,那么getTask指向的地址就是http:
9527/task,所需参数是一个String类型的id,查询后返回的对象就是Task。
是不是很简单?
方法变量的:
@Path-查询主键,@QueryMap-查询所需的参数集合,可以是任意对象。
比如我们查询Task列表
publicvoidGetData(){
//这就是@QueryMap需要的参数
HashMap<
map=newHashMap<
map.put("
pageIndex"
pagination.getPageIndex());
//当前页标
pageSize"
isTopAdd?
lstData.size()>
=20?
lstData.size():
20:
20);
//需要的数量
joinType"
mJoinType);
//任务的类型
status"
mStatus);
//任务的状态
endAt"
System.currentTimeMillis()/1000);
//截止时间s
startAt"
DateTool.getDateToTimestamp("
2014-01-01"
app.df5)/1000);
//起始时间s
//发起请求,这里create方法返回的其实是ITask的代理类RestAdapterFactory.getInstance().build(Config_project.API_URL()).create(ITask.class).getTasks(map,newRCallback<
(){
@overide
publicvoidsuccess(PaginationX<
paginationXTasks,Responser){
//获取分页里的数据
ArrayList<
tasks=paginationXTasks.getData();
mAdapter.setData(tasks);
mAdapter.notifyDataSetChanged();
@Overide
publicvoidfailure(RetrofitErrore){
);
这里返回的是我们封装过的PaginationX对象,是一个分页数据封装,里面最终的数据就是Task数组。
简单的几步是不是就完成了一个请求和更新界面?
奏是这么任性!
当然,Retrofit的用法肯定不止这些,大家可以去翻墙查询Retrofit官网,上面有很详细的API解释,下一篇我将用RxJava和RxAndroid配合Retrofit使用,进一步简化代码,也让大家进一步了解Retrofit。
现在我们来继续介绍Retrofit配合RxJava、RxAndroid的用法。
配合Rx是为了体现函数式编程的思想,其实用法差别不大,只是在接口里定义方法的返回值有所差别,当然,build.gradle文件里需要导入两个库地址
io.reactivex:
1.0.14
1.0.1
下面我们以更新任务为例,观察两种方式的区别
//RX模式的方法定义之一
@PUT("
Observable<
update(@Path("
)StringId,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 网络 请求 框架 Retrofit