Android -错误:类型转换器必须接收一个参数



我已经搜索了很多,但无法得到解决方案。

我最初得到这个错误

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注释。

这解决了我的错误。