gpt4 book ai didi

android - 错误 : Query method parameters should either be a type that can be converted into a database column or a List/Array that contains such type

转载 作者:行者123 更新时间:2023-11-29 23:30:54 33 4
gpt4 key购买 nike

我的类型转换器

import androidx.room.TypeConverter
import com.amin.movie.vo.Query

object QueryTypeConverter {
@TypeConverter
@JvmStatic
fun queryToString(query: Query?): String? = if (query != null) Query.toJson(query) else null

@TypeConverter
@JvmStatic
fun stringToQuery(data: String?): Query? = if (data != null) stringToQuery(data) else null
}

实体是

import androidx.room.Entity
import androidx.room.PrimaryKey
import androidx.room.TypeConverters
import com.amin.movie.db.MovieTypeConverters
import com.amin.movie.db.QueryTypeConverter
import com.google.gson.annotations.SerializedName

@Entity
@TypeConverters(QueryTypeConverter::class)
data class MovieSearchResult(
// and other fields
@PrimaryKey
val query: Query
)

当我想做我的项目时发生了这个错误错误:查询方法参数应该是可以转换为数据库列的类型或包含此类类型的列表/数组。您可以考虑为此添加一个类型适配器。

最佳答案

我已经在 latest release of Room at this time 上测试了您的代码它对我有用。我创建了一个 Database和一个 Dao以确保它正常工作并且一切看起来都很好。
尽管您的方法现在有效,但这不是他们在 Room documentation for kotlin 的 kotlin 示例中显示的方法. Here是他们在 TypeConverter 上的例子这就是它如何适用于您的具体情况(我还提供了 DatabaseDao 我制作的):

// The query class wasn't provided so this is just a simple
// class with a toJson static method
data class Query(var query: String) {
companion object {
fun toJson(query: Query): String {
return query.query
}
}
}

@Entity
@TypeConverters(QueryTypeConverter::class)
data class MovieSearchResult(
// and other fields
@PrimaryKey
val query: Query
)

class QueryTypeConverter {
@TypeConverter
fun queryToString(query: Query?): String? = if (query != null) Query.toJson(query) else null

@TypeConverter
fun stringToQuery(data: String?): Query? = if (data != null) stringToQuery(data) else null
}

@Dao
interface MovieSearchResultDao {
@Insert
fun insert(r: MovieSearchResult)

@Update
fun update(r: MovieSearchResult)

@Delete
fun delete(r: MovieSearchResult)
}

@Database(entities=arrayOf(MovieSearchResult::class), version = 1, exportSchema = false)
abstract class AppDatabase : RoomDatabase() {
abstract fun dao(): MovieSearchResultDao
companion object {
private var DB: AppDatabase? = null;
public fun instance(context: Context): AppDatabase {
var db = DB
if (db == null) {
db = Room.databaseBuilder(
context,
AppDatabase::class.java, "database-name"
).build()
DB = db
}
return db
}
}
}

关于android - 错误 : Query method parameters should either be a type that can be converted into a database column or a List/Array that contains such type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52686650/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com