当前位置: 首页 > news >正文

android 网络通信api,Android网络通信框架LiteHttp 第十二节:通过注解完成API请求

Android网络通信框架LiteHttp 第十二节:通过注解完成API请求

litehttp2.x版本系列教程

QQ群: 大群 47357508,二群 42960650

本系列文章面向android开发者,展示开源网络通信框架LiteHttp的主要用法,并讲解其关键功能的运作原理,同时传达了一些框架作者在日常开发中的一些最佳实践和经验。

第十二节:LiteHttp之通过注解完成API请求

本节强烈推荐通过 RichParamModel 方式构建请求,它大概是长这样子:

@HttpUri(loginUrl)

classLoginParamextendsHttpRichParamModel{

publicStringname="lucy";

publicStringpassword="123456";

}

liteHttp.executeAsync(newUserRichParam());

表示请求 loginUrl 这个地址,并传递 name 和 password 参数,返回用户 User 对象。

关于注解,还得从头说起:

在java模型自动转化那一节我们讲过,lite-http 可以把java对象转换为http请求的参数,需要该java类继承 HttpParamModel,实际上 HttpParamModel 还有一个拓展子类 HttpRichParamModel,拓展顾名思义是一个基于原来的增强,开发者连Request都不用写了,直接继承 HttpRichParamModel 通过注解来完成整个http请求的参数约定。

1. 简单参数 HttpParamModel

先看这段代码:

// Usage of Annotation

publicStringuserUrl="http://litesuits.com/mockdata/user_get";

@HttpUri(userUrl)

@HttpMethod(HttpMethods.Get)

@HttpID(1)

@HttpCacheMode(CacheMode.CacheFirst)

@HttpCacheExpire(value=1,unit=TimeUnit.MINUTES)

classUserAnnoParamimplementsHttpParamModel{

publiclongid=110;

privateStringkey="aes";

}

liteHttp.executeAsync(newJsonRequest(newUserAnnoParam(),User.class){}

.setHttpListener(newHttpListener(){

@Override

publicvoidonSuccess(Useruser,Responseresponse){

HttpUtil.showTips(activity,"UserAnnoParam",user.toString());

}

}));

所见即所得,通过这些注解:@HttpUri(userUrl)

@HttpMethod(HttpMethods.Get)

@HttpID(1)

@HttpCacheMode(CacheMode.CacheFirst)

@HttpCacheExpire(value = 1, unit = TimeUnit.MINUTES)

上面一段代码,完成了这样一次请求配置:请求地址为 userUrl

请求方式为 GET

请求ID为 1

请求优先使用缓存

请求缓存时间为1分钟

2. 扩展版参数HttpRichParamModel

再看一下拓展的参数类如何工作:

// Best Practice: HTTP Rich Param Model (It is simpler and More Useful)

@HttpUri(userUrl)

classUserRichParamextendsHttpRichParamModel{

publiclongid=110;

privateStringkey="aes";

}

// 一句话调用即可

liteHttp.executeAsync(newUserRichParam());

可见,最后一句执行时连 Request 都没有创建,直接将参数投入执行。定义RichParam,可指定URL、参数、响应体三个关键事物:

请求地址: uerUrl

请求参数: id=110 & key=aes

请求响应: User

更多注解方式有:@HttpSchemeHost("http://litesuits.com") // 定义scheme

@HttpUri("/mockdata/user_get") // 定义uri 或者 path

@HttpMethod(HttpMethods.Get) // 请求方式

@HttpCharSet("UTF-8") // 请求编码

@HttpTag("custom tag") // 打TAG

@HttpCacheMode(CacheMode.CacheFirst) // 缓存模式

@HttpCacheKey("custom-cache-key-name-by-myself") // 缓存文件名字

@HttpCacheExpire(value = 1, unit = TimeUnit.MINUTES) // 缓存时间

@HttpID(2) // 请求ID

@HttpMaxRetry(3) // 重试次数

@HttpMaxRedirect(5) // 重定向次数

此外,继承Rich Param的参数类还可以复写下面方法:createHeaders : 创建header

createQueryBuilder: 设置参数构建器

createHttpListener: 创建监听器

createHttpBody: 创建数据体

createHttpBody是为POST、PUT等方式创建数据体,GET、DELETE等不需要,因其参数直接拼接到URL。

3. 最佳实践

最后,通过这句:liteHttp.executeAsync(new UserRichParam());

可见 RichParamModel 是可以直接抛入执行的,这就将其和 Request 基本提升到了同一级别。

在我的 App 里,我是直接用 RichParamModel 的,因为它更直观简单,并且 RichParamModel 可以通过 set 方法设置监听器等参数,所以我也建议开发者使用这个进行请求配置。

强烈推荐通过 RichParamModel 方式构建请求。

相关文章:

  • mysql 中show 命令用法详细介绍
  • note8 升级android9,三星note8 N9500一键ADB升级One UI 9.0内测版
  • android设置点击事件外部类,Android中Dialog设置外部点击事件
  • html零基础自学,第一个HTML页面如何写?——零基础自学网页制作
  • CentOS+Nginx+PHP+Mysql+安全指南全环境搭建笔记
  • html怎么转换docx,html2word html转换为word 使用docx4j
  • html5网页中加入播放器,6 个 HTML5 的多媒体播放器
  • 在CentOs 5.1中使用rpm安装NGINX+php+mysql
  • android go更新机型,诺基亚1 Plus喜提Android 10 GO系统更新
  • HTML聊天框特效,利用jQuery实现响应式聊天窗口界面特效
  • 鼠标闲置一段时间后自动隐藏
  • html购物倒计时,基于javascript实现的购物商城商品倒计时实例
  • LWUIT + ChartComponent 之一实现饼图(PieChart)
  • win10n网页如何保存为html,win10浏览器如何保存网页_win10浏览器怎么保存网页
  • 牛人(笑来)VS牛人(阿朱):惺惺相惜 - [读书,这么好的事儿]
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • CSS魔法堂:Absolute Positioning就这个样
  • HTML-表单
  • Unix命令
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 转载:[译] 内容加速黑科技趣谈
  • C# - 为值类型重定义相等性
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • $.ajax()参数及用法
  • $L^p$ 调和函数恒为零
  • (3)llvm ir转换过程
  • (3)nginx 配置(nginx.conf)
  • (33)STM32——485实验笔记
  • (c语言)strcpy函数用法
  • (python)数据结构---字典
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (转)JAVA中的堆栈
  • (转)程序员疫苗:代码注入
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .NET CORE Aws S3 使用
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET 动态调用WebService + WSE + UsernameToken
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • []error LNK2001: unresolved external symbol _m
  • [1] 平面(Plane)图形的生成算法
  • [Angular 基础] - 数据绑定(databinding)
  • [C++]unordered系列关联式容器
  • [cocos creator]EditBox,editing-return事件,清空输入框
  • [Java算法分析与设计]--线性结构与顺序表(List)的实现应用
  • [Linux_IMX6ULL驱动开发]-基础驱动
  • [OIDC in Action] 3. 基于OIDC(OpenID Connect)的SSO(添加Github OAuth 2.0的支持)
  • [SV]SystemVerilog中指定打印格式
  • [编]使用AutoCompleteExtender实现文本框自动匹配
  • [量化投资-学习笔记009]Python+TDengine从零开始搭建量化分析平台-KDJ
  • [洛谷P5174]圆点
  • [每周一更]-(第47期):Go业务发展方向