赞
踩
PageKeyedDataSource是比较常见的一种DataSource,适用于数据源以“页”的方式进行请求的情况。例如,请求参数为page=2&pagesize=10,则表示数据源以10条数据为一页,当前返回第二页的5条数据。
接下来首先来按照MVVM架构跑通一个笑话大全数据接口,这里使用的是最新笑话接口,key是我自己注册的。
接口:http://v.juhe.cn/joke/content/text.php?key=您申请的KEY&page=1&pagesize=10
接口返回数据示例:
{ "error_code": 0, "reason": "Success", "result": { "data": [ { "content": "女生分手的原因有两个,\r\n一个是:闺蜜看不上。另一个是:闺蜜看上了。", "hashId": "607ce18b4bed0d7b0012b66ed201fb08", "unixtime": 1418815439, "updatetime": "2014-12-17 19:23:59" }, { "content": "老师讲完课后,问道\r\n“同学们,你们还有什么问题要问吗?”\r\n这时,班上一男同学举手,\r\n“老师,这节什么课?”", "hashId": "20670bc096a2448b5d78c66746c930b6", "unixtime": 1418814837, "updatetime": "2014-12-17 19:13:57" }, ...... ] } }
首先添加相关依赖,这里使用Retrofit作为网络请求库。其余的按照需要依次添加即可。由于该接口为http接口,需要在AndroidManifest添加
android:networkSecurityConfig="@xml/network_config"
network_config.xml
<?xml version ="1.0" encoding ="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system"/>
</trust-anchors>
</base-config>
</network-security-config>
以及别忘了添加网络权限。
Model:
//按照"最新笑话"定义
data class JokeResponse(val reason:String, val result:Result,@SerializedName("error_code") val errorCode :Int) {
data class Result(val data:List<Joke>)
data class Joke(val content:String, val hashId:String,val unixtime:Long,val updatetime:String)
}
web请求相关:
interface JokeService {
@GET("content/text.php?key=${
MyApplication.KEY}")
fun getJokes(@Query("page") page:Int,@Query("pagesize") pagesize:Int):
Call<JokeResponse>//text.php?page=1&pagesize=10&key=
}
object ServiceCreator {
private const val BASE_URL = "http://v.juhe.cn/joke/"
private val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
fun <T> create(serviceClass:Class<T>):T = retrofit.create(serviceClass)
inline fun <reified T> create():T = create(T::class.java)
}
//统一的网络数据源访问入口,对所有网络请求的API进行封装,单例类
object RetrofitNetwork {
//获取最新笑话列表
private val jokeService = ServiceCreator.create(JokeService::class.java)
suspend fun searchJokes(page:Int,pagesize:Int) = jokeService.getJokes(page,pagesize).await()
priv
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。