У меня возникла ошибка при реализации преобразователя типов Room.
error: Cannot figure out how to save this field into database. You can consider adding a type converter for it.
private java.util.List<? extends java.util.Map<java.lang.String, mypage.profile.entity.OtherServiceEntity>> otherServices;
Это моя реализация, Сначала настройте объект, как показано ниже, потому что POJO содержит список карт. Я реализовал TypeConverter комнаты следующим образом
object OtherServicesTypeConverter {
private val gson = Gson()
@TypeConverter
@JvmStatic
fun stringToList(data: String?): List<Map<String, OtherServiceEntity>> {
if (data == null) {
return Collections.emptyList()
}
val listType = object : TypeToken<List<Map<String, OtherServiceEntity>>>() {
}.type
return gson.fromJson<List<Map<String, OtherServiceEntity>>>(data, listType)
}
@TypeConverter
@JvmStatic
fun listToString(objects: List<Map<String, OtherService>>): String {
return gson.toJson(objects)
}
}
Затем используйте аннотацию внутри объекта и базу данных, как показано ниже
@Entity(tableName = "ProfileEntities")
data class ProfileEntity(
@PrimaryKey
@SerializedName("masterId") var masterId: Long = 0,
@SerializedName("nickname") var nickname: String = "",
@TypeConverters(OtherServicesTypeConverter::class)
@SerializedName("otherServices") var otherServices: List<Map<String, OtherServiceEntity>>,
@Embedded
@SerializedName("images") var images: ProfileImagesEntity = ProfileImagesEntity(),
@SerializedName("updatedAt") var updatedAt: String = ""
)
@Database(entities = [ArticleFeatureEntity::class, ProfileEntity::class], version = 3)
@TypeConverters(DataTypeConverter::class, ProfileTypeConverter::class, OtherServicesTypeConverter::class)
abstract class AppDatabase : RoomDatabase() {
abstract fun profileDao(): ProfileDao
// Code here
}
Пожалуйста, помогите поддержать меня, спасибо!





Наконец, я осознал, что Room нуждается в некоторых особых изменениях в реализации преобразователя типов (переход на ArrayList<HashMap<String, OtherServiceEntity>>). Тем не менее, я не знаю, что это функция или ошибка, потому что в других случаях я все еще могу использовать List как тип. Это деталь, которую я сделал, и теперь я могу ее запустить.
@Entity(tableName = "ProfileEntities")
data class ProfileEntity(
@TypeConverters(ProfileTypeConverter::class)
@SerializedName("details") var details: List<ProfileDetailEntity> = listOf(),
@Embedded
@SerializedName("images") var images: ProfileImagesEntity = ProfileImagesEntity(),
@PrimaryKey
@SerializedName("masterId") var masterId: Long = 0,
@TypeConverters(OtherServicesTypeConverter::class)
@SerializedName("otherServices") var otherServices: ArrayList<HashMap<String, OtherServiceEntity>> = arrayListOf(),
@SerializedName("updatedAt") var updatedAt: String = ""
)
И реализация преобразователей
class ProfileTypeConverter {
private val gson = Gson()
@TypeConverter
fun stringToList(data: String?): List<ProfileDetailEntity> {
if (data == null) {
return Collections.emptyList()
}
val listType = object : TypeToken<List<ProfileDetailEntity>>() {
}.type
return gson.fromJson<List<ProfileDetailEntity>>(data, listType)
}
@TypeConverter
fun listToString(someObjects: List<ProfileDetailEntity>): String {
return gson.toJson(someObjects)
}
}
class OtherServicesTypeConverter {
private val gson = Gson()
@TypeConverter
fun stringToList(data: String?): ArrayList<HashMap<String, OtherServiceEntity>> {
if (data == null) {
return ArrayList()
}
val listType = object : TypeToken<ArrayList<HashMap<String, OtherServiceEntity>>>() {
}.type
return gson.fromJson<ArrayList<HashMap<String, OtherServiceEntity>>>(data, listType)
}
@TypeConverter
fun listToString(objects: ArrayList<HashMap<String, OtherServiceEntity>>): String {
return gson.toJson(objects)
}
}
Удачного кодирования!
Это зависит от конкретной реализации, в моем случае это относится к List<Map<String, OtherServiceEntity>. Были ли у вас проблемы с этим типом?
Я все еще занимаюсь этой проблемой, даже используя этот новый TypeConverter. Какие-нибудь советы?