【问题标题】:How to use PagingSource and Room with fields annotated by Embedded如何将 PagingSource 和 Room 与 Embedded 注释的字段一起使用
【发布时间】:2021-06-25 10:35:01
【问题描述】:

我想使用 Paging 3 Library 进行分页,将 db 作为 SSO,我有一些使用嵌入式注释(一对多,关系)示例的数据类 ↓

  data class PojoEmbended(
    @Embedded
    var messageEntity: MessageEntity,
    @Relation(
        parentColumn = "messageId",
        entityColumn = "messageId",
        entity = AttachmentsEntity::class
    )
    var listAttachments: List<AttachmentsEntity>
)

AttachmentsEntity 长这样↓

@Entity(
    tableName = "ChatAttachments",
    foreignKeys = [ForeignKey(
        entity = MessageEntity::class,
        parentColumns = ["messageId"],
        childColumns = ["messageId"],
        onDelete = ForeignKey.CASCADE
    )],
    primaryKeys = ["messageId"]
)
data class AttachmentsEntity(
    @ColumnInfo(name = "messageId", index = true)
    var messageId: String = "",
    @ColumnInfo(name = "title")
    var title: String = "",
    @ColumnInfo(name = "imageUrl")
    var imageUrl: String = "",
    @ColumnInfo(name = "imageType")
    var imageType: String = ""
)

DAO 中的函数 ↓

 @Transaction
    @Query("SELECT * FROM MessageTable")
    suspend fun getAllChatMessages(): PagingSource<Int, PojoEmbended>

当我尝试制作一个项目时,它失败并显示错误↓

错误:不确定如何将 Cursor 转换为此方法的返回类型 (androidx.paging.PagingSource)。 公共抽象 java.lang.Object getAllChatMessages(@org.jetbrains.annotations.NotNull()

这是问题↓
在这种情况下怎么办更好?从数据库列表获取我自己的 PagingSource 并在 RemoteMediator 中使用它或删除 Embedded 注释并使用 TypeConverter ?

【问题讨论】:

    标签: android kotlin android-room android-paging android-paging-3


    【解决方案1】:

    它无法转换为暂停的 PagingSource 返回类型。改为这样做

    @Transaction
    @Query("SELECT * FROM MessageTable")
    fun getAllChatMessages(): PagingSource<Int, PojoEmbended>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-10
      • 2016-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-18
      • 2019-10-14
      • 2021-05-16
      相关资源
      最近更新 更多