当前位置:   article > 正文

Android_Jetpack:Paging组件之PageKeyedDataSource的MVVM使用_android pagekeyeddatasource

android pagekeyeddatasource

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"
            },
            ......
        ]
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

首先添加相关依赖,这里使用Retrofit作为网络请求库。其余的按照需要依次添加即可。由于该接口为http接口,需要在AndroidManifest添加

android:networkSecurityConfig="@xml/network_config"

  • 1
  • 2

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>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

以及别忘了添加网络权限。

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)
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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=
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
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)
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
//统一的网络数据源访问入口,对所有网络请求的API进行封装,单例类
object RetrofitNetwork {
   
    //获取最新笑话列表
    private val jokeService = ServiceCreator.create(JokeService::class.java)
    suspend fun searchJokes(page:Int,pagesize:Int) = jokeService.getJokes(page,pagesize).await()

    priv
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/286531
推荐阅读
相关标签
  

闽ICP备14008679号