android - 如何修复 Android Room (Kotlin) 中的 TypeConverter 类
问题描述
我正在使用 Android Room,但遇到了问题。我创建了一个TypeConverter
类(在我的例子中是ConverterHelper
),添加了注释 @ProvidedTypeConverter、@TypeConverter 和 @TypeConverters(ConverterHelper::class) 但我收到以下错误:
java.lang.IllegalArgumentException: Unexpected type converter class com.example.mas_implementation_kotlin.helper.ConverterHelper. Annotate TypeConverter class with @ProvidedTypeConverter annotation or remove this converter from the builder.
这是我的ConverterHelper
:
@ProvidedTypeConverter
class ConverterHelper {
@TypeConverter
fun stringToListOfStrings(value: String): ArrayList<String> {
val listType: Type = object : TypeToken<ArrayList<String?>?>() {}.type
return Gson().fromJson(value, listType)
}
@TypeConverter
fun listOfStringsToString(list: List<String>): String {
val gson = Gson()
return gson.toJson(list)
}
@TypeConverter
fun listOfVisitsToString(listOfVisits: List<Visit>): String {
return Gson().toJson(listOfVisits).toString()
}
@TypeConverter
fun stringToListOfVisits(value: String): List<Visit> {
val listOfVisits = object : TypeToken<ArrayList<Visit>>() {}.type
return Gson().fromJson(value, listOfVisits)
}
}
数据库:
@Database(
entities = [
Consultant::class,
Doctor::class,
Person::class,
Place::class,
PreparationToTest::class,
Receptionist::class,
Referral::class,
Survey::class,
Technician::class,
Test::class,
TestResult::class,
Visit::class
], version = 1
)
@TypeConverters(ConverterHelper::class)
abstract class AppDatabase : RoomDatabase() {
public abstract fun entitiesDao(): EntitiesDao
}
我的实体:
@Entity
@TypeConverters
data class Visit(
@PrimaryKey val id: String,
@ColumnInfo(name = "visitDate") val visitDate: String,
@ColumnInfo(name = "visitPlaceId") val visitPlaceId: String,
@ColumnInfo(name = "defrayalOfExpenses") val defrayalOfExpenses: String,
@ColumnInfo(name = "additionalInfo") val additionalInfo: String,
@ColumnInfo(name = "personId") val personId: String,
@ColumnInfo(name = "consultantId") val consultantId: String,
@ColumnInfo(name = "receptionistId") val receptionistId: String,
@ColumnInfo(name = "referralId") val referralId: String,
@ColumnInfo(name = "visitsStatus") val visitStatus: String,
@ColumnInfo(name = "testId") val testId: String
)
这就是我在方法中创建 Db 的onCreate
方式:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
setUI()
database = Room.databaseBuilder(
this,
AppDatabase::class.java,
"database"
)
.addTypeConverter(ConverterHelper::class)
.fallbackToDestructiveMigration()
.build()
fetchDataFromDatabase()
fetchListOfBookedVisitsFromDb()
}
这就是我从数据库中获取数据的方式:
private fun fetchDataFromDatabase() {
val visitAdapter = VisitAdapter(baseContext, this::onClickAction)
lifecycleScope.launch(Dispatchers.IO) {
val entitiesDao = database.entitiesDao()
databaseHelper = DatabaseHelper(entitiesDao)
visitAdapter.setAdapterList(databaseHelper.getPersonVisitModelList())
withContext(Dispatchers.Main) {
binding.mainNewVisitListRecyclerView.apply {
adapter = visitAdapter
layoutManager = LinearLayoutManager(this@MainActivity)
}
}
}
}
我的DatabaseHelper
班级有方法:
fun getPersonVisitModelList(): List<VisitModel> {
val visitModelList = mutableListOf<VisitModel>()
val personVisitsString = entitiesDao.getAllPatientVisits()
val converterHelper = ConverterHelper()
val personVisitsList = converterHelper.stringToListOfVisits(personVisitsString)
for (visit in personVisitsList) {
visitModelList.add(
VisitModel(
visit.id,
getTestTypeByTestId(visit.testId),
getTestPlaceByPlaceId(visit.visitPlaceId),
visit.visitDate
)
)
}
return visitModelList
}
你知道如何解决这个错误吗?我尝试了注释getPersonVisitModelList
方法,因为我不确定是否可以创建和使用ConverterHelper
该类的实例,但错误仍然存在。
解决方案
推荐阅读
- excel - 从 Excel 中的字符串中提取主题标签
- ios - 为深色或浅色模式启动图像
- laravel - 如何返回 groupBy 的所有行
- javascript - 如何将排序功能从标题图标链接到要在 React 中排序的列
- html - flexbox中的垂直可滚动表格
- wpf - Powershell WPF StackPanel 未正确更新
- arrays - R:将数据框转换为三维数组?
- php - 如何使用高级自定义字段在选择字段中显示重复字段?
- php - PHP foreach 没有通过 JSON 文件循环
- c# - Unity-将图像上传到 Firebase 存储后如何获取下载 URL?