【发布时间】:2021-03-10 13:21:28
【问题描述】:
我有来自 API 的 POJO 数据类。
@Entity(tableName = "pokemon")
class Pokemon(
@PrimaryKey(autoGenerate = true)
var id: Int? = null,
@SerializedName("count")
@Expose
val count: Int?,
@SerializedName("next")
@Expose
val next: String?,
@SerializedName("results")
@Expose
val results: List<Result>? = null
)
和类列表:
class Result(
@SerializedName("name")
@Expose
val name: String?,
@SerializedName("url")
@Expose
val url: String?
)
我的数据库类:
@Database(entities = [Pokemon::class], version = 1, exportSchema = false)
@TypeConverters(Converters::class)
abstract class AppDatabase : RoomDatabase() {
companion object {
private var db: AppDatabase? = null
private const val DB_NAME = "main.db"
private val LOCK = Any()
fun getInstance(context: Context): AppDatabase {
synchronized(LOCK) {
db?.let { return it }
val instance = Room.databaseBuilder(
context,
AppDatabase::class.java,
DB_NAME
)
.fallbackToDestructiveMigration()
.build()
db = instance
return instance
}
}
}
abstract fun PokemonDao(): PokemonDao
}
我的班级转换器:
class Converters {
@TypeConverters
fun fromResultToString(result: slode.elsloude.pokemonapi.pojo.Result?): String? {
return Gson().toJson(result)
}
@TypeConverters
fun fromStringToResult(value: String?): slode.elsloude.pokemonapi.pojo.Result? {
return Gson().fromJson(value, Result::class.java)
}
}
我尝试这样做时遇到的错误是:
error: Class is referenced as a converter but it does not have any converter methods. - androidx.databinding.adapters.ConvertersC:\Users\elslode\.AndroidStudio3.6\PokemonApi\app\build\tmp\kapt3\stubs\debug\slode\elsloude\pokemonapi\pojo\Pokemon.java:22: error: Cannot figure out how to save this field into database. You can consider adding a type converter for it.
private final java.util.List<slode.elsloude.pokemonapi.pojo.Result> results = null;
^C:\Users\elslode\.AndroidStudio3.6\PokemonApi\app\build\tmp\kapt3\stubs\debug\slode\elsloude\pokemonapi\pojo\SinglePokemon.java:14: error: Cannot figure out how to read this field from a cursor.
【问题讨论】:
标签: android kotlin android-room typeconverter