java – 房间 – 比较实体中的列表

我有房间问题.
我有一个实体:

@Entity(tableName = "Entity")
data class Entity(val recipients: List<ID>?) {
    @ColumnInfo(name = "id")
    @PrimaryKey(autoGenerate = true) var id: Long = 0
}

如您所见,它包含ID列表(typealias ID = Long)
所以,我做了TypeConverter:

@TypeConverter
fun getlistofLongs(data: String?): List<ID> {
    if (data == null) {
        return Collections.emptyList()
    }
    val listType = object : Typetoken<List<Long>>() {}.type

    return gson.fromJson(data, listType)
}

@TypeConverter
fun convertListToString(ids: List<ID>): String = gson.toJson(ids)

我有一个问题,我无法正确查询此列表:

@Query("select count(*) from Message where recipients in (:recipients)")
fun count(recipients: List<ID>?): Int

如您所见,我需要比较两个列表(实体列表和方法列表)并从方法列表中获取包含Id的所有实体,但此查询始终返回0.我读过TypeConverter列表可能有问题,但我可以找不到任何解决方案.

解决方法:

用@RawQuery解决它:

" WHERE recipients LIKE ${recipients.joinToString(",", "\"", "\"")}"

结束编辑TypeConvertor:

@TypeConverter
fun getlistofLongs(data: String?): List<Long> {
    if (data == null) {
        return Collections.emptyList()
    }
    val listType = object : Typetoken<List<Long>>() {}.type

    return gson.fromJson("[$data]", listType)
}

@TypeConverter
fun convertListToString(ids: List<Long>?): String? {
    if (ids == null) return null
    var idsstring = gson.toJson(ids)
    idsstring = idsstring.replace("]", "")
    idsstring = idsstring.replace("[", "")
    return idsstring
}

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...