tags: 耳朵_android
几乎所有的目前市面上的APP, 要是说没有一个与服务器交互的功能几乎是不可能的, android这边呢目前比较流行的网络请求框架有Volley、AndroidAsync、OkHttp等,当前我们使用的HMLibrary中就有一个在OkHttp的基础上使用Kotlin进一步扩展封装了的HMRequest, 接下来将用它来进行一次网络请求的演示.
测试API地址: http://ear.life/?json=get_post&id=174
使用任意一款API调试工具, 或者直接网络访问也行, 可以看到接口返回结构是这样的:
判断正常返回的结构为 "status": "ok",, 同时我们还要再看看出错时是怎样提示的
得到请求失败时的错误提示, "status": "error", "error": "XXXXX"
现在我们可以来开始做Model解析了,新建http包,并添加HttpServerPath类:
object HttpServerPath {
val MAIN = "http://ear.life"
}
我们使用object来修饰, 这样里面的属性就可以直接HttpServerPath.MAIN来调用了, 类似java中的static.
根据接口返回的结构我们可以搭建用于本项目http交互的Base类了:
open class BaseModel(var status: String) : HMModel() {
//数据是否正确
override var valid: Boolean = false
get() = "ok".equals(status)
//相应提示
override var message: String = ""
get() = error
}
接着找个地方写我们的测试Model, 这里只为演示, 我们可以选择性的写几个用得到的字段, 并不用全部解析:
class PostModel(var post: Post) : BaseModel() {
var next_url: String? = null
var previous_url: String? = null
class Post(var id: Int, var title: String)
}
status字段在BaseModel中已经定义了, 这里可以省略, 其它的字段可以直接定义在PostModel()括号中, 也可以定义在下面{}里, post是一个内部类, 这些跟java的没什么两样, 了解些kotlin基础就可以一目了然了,这里不多说.
接着我们可以开始调用一下接口试试:
val params = HashMap()
params.put("json", "get_post")
params.put("id", 174)
HMRequest.go(HttpServerPath.MAIN, params) {
showToast(it?.post?.title)
}
OK没有意外, "下雨时你会想起谁" 已经toast出来了, 就是这么简单, 如果你想缓存这次请求到本地, 下次不再请求服务器的话, 仅仅需要添加cache = true :
HMRequest.go(HttpServerPath.MAIN, params, cache = true) {
showToast(it?.post?.title)
}
HMRequest中还有很多可以设置的属性, 感兴趣的同学可以前去github查看更详细的文档.
github: https://github.com/bxcx/ear
本节分支: https://github.com/bxcx/ear/tree/request