我已经搜索了很多,但无法得到解决方案。
我最初得到这个错误
error: Query method parameters should either be a type that can be converted into a database column or a List / Array that contains such type. You can consider adding a Type Adapter for this.
androidx.sqlite.db.SupportSQLiteQuery query);
所以在搜索了一下之后,决定在数据库类
中添加@TypeConverter注释和@TypeConverters()注释这是我现在得到的错误。错误:类型转换器必须接收1个参数。public final androidx.sqlite.db.SimpleSQLiteQuery getAllQuery(@org.jetbrains.annotations.NotNull())
我的DAO有这个-
@Query("SELECT * FROM tea WHERE name == :name")
fun getTea(name: String): LiveData<Tea>
我的TypeCoverter类有这个方法
@TypeConverter
fun getAllQuery(sortBy: TeaSortBy, showOnlyFavorites: Boolean): SimpleSQLiteQuery {
val queryBuilder = SupportSQLiteQueryBuilder
.builder(DataTeaNames.TABLE_NAME)
.orderBy(getSortColumn(sortBy))
if (showOnlyFavorites) {
queryBuilder.selection(DataTeaNames.COL_FAVORITE, arrayOf("1"))
}
return SimpleSQLiteQuery(queryBuilder.create().sql)
}
在存储库:
fun getSortedTeas(sort: String, fileByFavorite: Boolean = false): LiveData<PagedList<Tea>> {
val sortBy = SortUtils.TeaSortBy.valueOf(sort)
val factory = dao.getAll(SortUtils.getAllQuery(sortBy, fileByFavorite))
return LivePagedListBuilder(factory, PAGE_SIZE)
.build()
}
提前道歉,我不熟悉在房间数据库中使用TypeConverters。我将非常感谢你的帮助。谢谢你。
需要一个类来帮助Room
理解带有@TypeConverter
注释的Tea
类。
示例:(使用Gson
)
class TeaConverter {
@TypeConverter
fun toTeaList(json: String): List<Tea> {
val type = object : TypeToken<List<Tea>>(){}.type
return Gson().fromJson(json, type)
}
@TypeConverter
fun toJson(teaList: List<Tea>): String {
val type = object: TypeToken<List<Tea>>(){}.type
return Gson().toJson(torrent, type)
}
}
然后将此转换器添加到您的数据库中,如:
@TypeConverters(TeaConverter::class)
abstract class TeaDatabase : RoomDatabase() {}
原来是Kotlin和Room版本的不匹配导致了我最初的错误,从这个答案- https://stackoverflow.com/a/68052960/8442557
另外,我错过了添加@RawQuery注释。
这解决了我的错误。