当前位置: 首页 > 知识库问答 >
问题:

kotlin数据类中的Wordpress Rest Api类别序列化

东门晟
2023-03-14

我有一个项目与android应用程序从wordpress rest api获取帖子,我采取的一些字段是这样的列表。

[
  {
    "id": 43600,
    "date": "2020-09-07T19:52:47",
    "title": {
      "rendered": "Video: .... "
    },
    "content": {
      "rendered": "<div class=\"wp-block-embed__wrapper\"></div>",
      "protected": false
    },
    "author": 31,
    "featured_media": 43601,
    "categories": [
      788,
      2760
    ]
  }
]

Wordpress API-如何在Android/Java中遍历对象的JSON数组

Android Kotlin解析嵌套JSON

将Json解析为原始数组Kotlin

https://medium.com/@gilesjeremydev/room-through-a-complete-example-ce5c9ed417ba

我试着把它保存到本地存储空间中,在单个实体中。但基于google doc,它将被分离为两个实体,并与annotation@Relation绑定在一起

@Entity(tableName = "post")
data class SomePost(

    @PrimaryKey
    @field:SerializedName("id")
    val id: Int,
    @field:SerializedName("date")
    val date: String,
    @Embedded
    @field:SerializedName("title")
    val title: PostTitle,
    @Embedded
    @field:SerializedName("content")
    val content: PostContent,

    @field:SerializedName("featured_media")
    val imageId: Int,
    @field:SerializedName("author")
    val author: Int

)

@Entity
data class PostCategories(

    @PrimaryKey(autoGenerate = true)
    val id: Int,
    @field:SerializedName("categories")
    val postCategories: Int

)

data class SomePostRelationship (
    @Embedded
    var post: SomePost? = null,

    @Relation(
        parentColumn = "id",
        entityColumn = "categories"
    )
    var categories: List<PostCategories>? = null
)

interface PostService {

    companion object {
        const val ENDPOINT = "https://example.com/wp-json/"
    }

    // Posts
    @GET("wp/v2/posts/")
    suspend fun getPostAll(
        @Query("page") page: Int? = null,
        @Query("per_page") perPage: Int? = null,
        @Query("search") search: String? = null,
        @Query("order") order: String? = null
    ): Response<List<somePost>>

问题是数据类postCategories。

共有1个答案

卢和昶
2023-03-14

在尝试了一些变异之后。

我决定使用转换器,并将其结合到dataclass中。

@Entity(tableName = "post")
data class SomePost(

...

    @field:SerializedName("categories")
    var categories: ArrayList<Int>? = null,
...
)


class Converters {

...
    @TypeConverter
    fun listToInt(value: ArrayList<Int>?): String? {
        return Gson().toJson(value)
    }

    @TypeConverter
    fun intToList(value: String?): ArrayList<Int>? {
        val type = object : TypeToken<ArrayList<Int>?>() {}.type
        return Gson().fromJson(value, type)
    }

}
 类似资料:
  • 和类型有什么区别? 似乎可以用它们进行相同的操作(循环、筛选表达式等。),在行为或用法上有什么区别吗?

  • 数据类似乎是Java中老式POJO的替代品。这些类将允许继承是可以预期的,但我看不到扩展数据类的方便方法。我需要的是这样的东西:

  • 在Android应用程序中,我需要用一个抽象级别反序列化Kotlin数据类的Json数据。但我不知道如何在构造函数中放置正确的属性。 简单来说,假设我有一个形状: 有两个派生 和 所以我的目标是,不要实例化一个形状。所以,相反,总是反序列化它的派生。稍后,我需要处理其他类中的一些集合属性,如: 但我还必须知道每个元素的派生类型。 当我尝试用Gson反序列化给定的示例时 我总是有一个非法的辩论例外

  • 主要内容:数据类,密封类数据类 Kotlin 可以创建一个只包含数据的类,关键字为 data: 编译器会自动的从主构造函数中根据所有声明的属性提取以下函数: / 格式如 对应于属性,按声明顺序排列 函数 如果这些函数在类中已经被明确定义了,或者从超类中继承而来,就不再会生成。 为了保证生成代码的一致性以及有意义,数据类需要满足以下条件: 主构造函数至少包含一个参数。 所有的主构造函数的参数必须标识为 或者 ; 数据类不可

  • 数据类 Kotlin 可以创建一个只包含数据的类,关键字为 data: data class User(val name: String, val age: Int) 编译器会自动的从主构造函数中根据所有声明的属性提取以下函数: equals() / hashCode() toString() 格式如 "User(name=John, age=42)" componentN() functio