tags: 耳朵_android
幾乎所有的目前市面上的APP, 要是說沒有一個(gè)與服務(wù)器交互的功能幾乎是不可能的, android這邊呢目前比較流行的網(wǎng)絡(luò)請求框架有Volley峡谊、AndroidAsync、OkHttp等既们,當(dāng)前我們使用的HMLibrary中就有一個(gè)在OkHttp的基礎(chǔ)上使用Kotlin進(jìn)一步擴(kuò)展封裝了的HMRequest, 接下來將用它來進(jìn)行一次網(wǎng)絡(luò)請求的演示.
使用任意一款A(yù)PI調(diào)試工具, 或者直接網(wǎng)絡(luò)訪問也行, 可以看到接口返回結(jié)構(gòu)是這樣的:
判斷正常返回的結(jié)構(gòu)為 "status": "ok",, 同時(shí)我們還要再看看出錯時(shí)是怎樣提示的
得到請求失敗時(shí)的錯誤提示, "status": "error", "error": "XXXXX"
現(xiàn)在我們可以來開始做Model解析了,新建http包,并添加HttpServerPath類:
object HttpServerPath {
val MAIN = "http://ear.life"
}
我們使用object來修飾, 這樣里面的屬性就可以直接HttpServerPath.MAIN來調(diào)用了, 類似java中的static.
根據(jù)接口返回的結(jié)構(gòu)我們可以搭建用于本項(xiàng)目http交互的Base類了:
open class BaseModel(var status: String) : HMModel() {
//數(shù)據(jù)是否正確
override var valid: Boolean = false
get() = "ok".equals(status)
//相應(yīng)提示
override var message: String = ""
get() = error
}
接著找個(gè)地方寫我們的測試Model, 這里只為演示, 我們可以選擇性的寫幾個(gè)用得到的字段, 并不用全部解析:
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中已經(jīng)定義了, 這里可以省略, 其它的字段可以直接定義在PostModel()括號中, 也可以定義在下面{}里, post是一個(gè)內(nèi)部類, 這些跟java的沒什么兩樣, 了解些kotlin基礎(chǔ)就可以一目了然了,這里不多說.
接著我們可以開始調(diào)用一下接口試試:
val params = HashMap<String, Any>()
params.put("json", "get_post")
params.put("id", 174)
HMRequest.go<PostModel>(HttpServerPath.MAIN, params) {
showToast(it?.post?.title)
}
OK沒有意外, "下雨時(shí)你會想起誰" 已經(jīng)toast出來了, 就是這么簡單, 如果你想緩存這次請求到本地, 下次不再請求服務(wù)器的話, 僅僅需要添加cache = true :
HMRequest.go<PostModel>(HttpServerPath.MAIN, params, cache = true) {
showToast(it?.post?.title)
}
HMRequest中還有很多可以設(shè)置的屬性, 感興趣的同學(xué)可以前去github查看更詳細(xì)的文檔.
github: https://github.com/bxcx/ear
本節(jié)分支: https://github.com/bxcx/ear/tree/request