有json:
{
"success": true,
"result": {
"current_page": 1,
"data": [
{
"id": 1,
"name": "Hayley O'Keefe",
"description": "Eveniet sed exercitationem distinctio voluptatum qui magnam ratione et soluta itaque explicabo laborum nemo mollitia et veniam aut sed voluptatibus at sequi aut consequatur labore quod vel iusto...",
"date": "1991-03-24"
},
{
"id": 2,
"name": "Terry Schaefer",
"description": "Consectetur explicabo porro quis debitis itaque corrupti eius beatae aliquid facilis ea quo soluta porro est facere ut quia sit provident suscipit ut eos inventore est aperiam nostrum sit reprehenderit...",
"date": "1988-08-27"
},
{
"id": 3,
"name": "Jude Sporer DVM",
"description": "Explicabo illum et excepturi doloremque quidem laboriosam excepturi quae fugit nostrum et enim enim libero vitae sit perspiciatis quis consequatur eum ratione sequi doloribus voluptatem velit commodi...",
"date": "1984-02-14"
},
{
"id": 4,
"name": "Prof. Leola Rogahn",
"description": "Quia iste id sint repellat debitis illo ex et commodi et repellendus consequuntur consequatur modi molestiae...",
"date": "2005-10-29"
},
{
"id": 5,
"name": "Jaylon VonRueden",
"description": "Aspernatur sit iusto enim asperiores est quis autem tempore fuga qui omnis inventore nostrum ab debitis ducimus voluptatem quia ipsa placeat molestiae dolores doloremque ipsa tempore vero...",
"date": "2019-04-09"
},
{
"id": 6,
"name": "Margie Kertzmann",
"description": "Aut itaque non expedita laborum vero inventore ipsa commodi nobis accusantium hic aspernatur ab fuga molestiae dignissimos eaque voluptatum sapiente totam et exercitationem dolorem qui tempora...",
"date": "2020-12-10"
},
{
"id": 7,
"name": "Monserrat Kulas",
"description": "Eum sunt eius ab sit qui soluta quisquam quam qui vel eaque exercitationem error necessitatibus aspernatur qui optio et qui doloribus necessitatibus aut et reprehenderit doloremque non et dolor...",
"date": "1976-02-25"
},
{
"id": 8,
"name": "Dr. Filomena Pagac PhD",
"description": "Dolores nostrum fugiat incidunt et sapiente sunt dolores et illo magnam repudiandae dolores et voluptas inventore error iusto rem ut aperiam quo similique eveniet ut culpa veniam recusandae pariatur delectus...",
"date": "1984-02-05"
},
{
"id": 9,
"name": "Camden Armstrong",
"description": "Est aspernatur tempore necessitatibus rerum aut placeat incidunt molestias molestiae voluptatem at non vitae...",
"date": "1980-04-05"
},
{
"id": 10,
"name": "Jade Mosciski",
"description": "Quis odio ut nihil non eum accusamus voluptatem minus deleniti non tempora eligendi ullam consequatur dignissimos ....",
"date": "1978-04-05"
}
],
"first_page_url": "http://candidate.scid.ru/api/books?page=1",
"from": 1,
"last_page": 10,
"last_page_url": "http://candidate.scid.ru/api/books?page=10",
"links": [
{
"url": null,
"label": "« Previous",
"active": false
},
{
"url": "http://candidate.scid.ru/api/books?page=1",
"label": "1",
"active": true
},
{
"url": "http://candidate.scid.ru/api/books?page=2",
"label": "2",
"active": false
},
{
"url": "http://candidate.scid.ru/api/books?page=3",
"label": "3",
"active": false
},
{
"url": "http://candidate.scid.ru/api/books?page=4",
"label": "4",
"active": false
},
{
"url": "http://candidate.scid.ru/api/books?page=5",
"label": "5",
"active": false
},
{
"url": "http://candidate.scid.ru/api/books?page=6",
"label": "6",
"active": false
},
{
"url": "http://candidate.scid.ru/api/books?page=7",
"label": "7",
"active": false
},
{
"url": "http://candidate.scid.ru/api/books?page=8",
"label": "8",
"active": false
},
{
"url": "http://candidate.scid.ru/api/books?page=9",
"label": "9",
"active": false
},
{
"url": "http://candidate.scid.ru/api/books?page=10",
"label": "10",
"active": false
},
{
"url": "http://candidate.scid.ru/api/books?page=2",
"label": "Next »",
"active": false
}
],
"next_page_url": "http://candidate.scid.ru/api/books?page=2",
"path": "http://candidate.scid.ru/api/books",
"per_page": 10,
"prev_page_url": null,
"to": 10,
"total": 100
},
"error": null
}
如果你把它分解成模型,你会得到以下层次结构(如果我没有混淆任何东西):
模型本身:
Pagination
:
data class Pagination(
val error: Any,
val result: Result,
val success: Boolean
)
Result
:
data class Result(
val current_page: Int,
val `data`: List<Data>,
val first_page_url: String,
val from: Int,
val last_page: Int,
val last_page_url: String,
val links: List<Link>,
val next_page_url: String,
val path: String,
val per_page: Int,
val prev_page_url: Any,
val to: Int,
val total: Int
)
Data
:
data class Data(
val date: String,
val description: String,
val id: Int,
val name: String
)
Link
:
data class Link(
val active: Boolean,
val label: String,
val url: String
)
我需要从中获取数据Data
问题来了。由于我需要在层次结构中更高的模型中“包装”两次Data
,因此我为此目的创建了以下类:
PaginationApiModel
:
class PaginationApiModel {
@SerializedName("result") @Expose
val result: ResultApiModel? = null
}
ResultApiModel
:
class ResultApiModel {
@SerializedName("data") @Expose
val data: ArrayList<Data>? = null
}
但是我需要从 Json 获取一组数据,这就是为什么我不太明白ApiDataSourceIMPL
如果我将它替换为ArrayList<Data>
如何实现这个类片段PaginationApiModel
:
for (audit in loadNameList) {
audit.id?.let {
PaginationLocalModel(
it,
audit.name.toString(),
audit.date.toString(),
audit.description.toString(),
)
}?.let {
dataSource.insert(
it
)
}
这就是我的班级现在的样子ApiDataSourceIMPL
:
class ApiDataSourceIMPL (private val dataSource: RDDataSource):
ApiDataSource {
override fun startMigration (context: Context) {
val call = ApiClient.instance?.api?.loadApi()
call?.enqueue(object: Callback <ArrayList<Data>>
{
override fun onResponse(
call: Call<ArrayList<Data>>,
response: Response<ArrayList<Data>>
) {
Log.d("ApiDataSource", "onResponse status: ${response.code()}")
var loadNameList: ArrayList<Data>? = null
// loadNameList?.clear()
loadNameList = (response.body() as ArrayList<Data>?)!!
for (audit in loadNameList) {
audit.id?.let {
PaginationLocalModel(
it,
audit.name.toString(),
audit.date.toString(),
audit.description.toString(),
)
}?.let {
dataSource.insert(
it
)
}
}
Toast.makeText(context, "ЗАГРУЗКА", Toast.LENGTH_SHORT).show()
}
override fun onFailure(call: Call <ArrayList<Data>>
, t: Throwable) {
t.printStackTrace()
Toast.makeText(context, "ОШИБКА! ВКЛЮЧИТЕ ИНТЕРНЕТ!", Toast.LENGTH_SHORT).show()
Log.e("ApiDataSource2", "onFailure", t)
}
})
}
}
本地数据库模型:
@Entity(tableName = "pagination_table")
class PaginationLocalModel (
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "id")
val id: Int,
@ColumnInfo(name = "name")
val name: String,
@ColumnInfo(name = "date")
val date: String,
@ColumnInfo(name = "description")
val description: String
)
本地数据库:
@Database(entities = [PaginationLocalModel::class], version = 1)
abstract class ReceiveDataDB : RoomDatabase() {
abstract val nameListDao : NameListDao
abstract val descriptionDao : DescriptionDao
}
带有循环的片段没有改变,链接到列表的活动发生了变化:
PS而不是类,
Data
您可以立即使用json模型PaginationLocalModel
-它们是相同的