Mac*_*ieg 5 android typeconverter kotlin android-room
我正在使用 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.
Run Code Online (Sandbox Code Playgroud)
这是我的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)
}
}
Run Code Online (Sandbox Code Playgroud)
数据库:
@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
}
Run Code Online (Sandbox Code Playgroud)
我的实体:
@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
)
Run Code Online (Sandbox Code Playgroud)
这就是我在onCreate方法中创建 Db 的方式:
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()
}
Run Code Online (Sandbox Code Playgroud)
这就是我从数据库获取数据的方式:
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)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
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
}
Run Code Online (Sandbox Code Playgroud)
你知道如何修复这个错误吗?我尝试了注释getPersonVisitModelList方法,因为我不确定是否可以创建和使用该类的实例ConverterHelper,但错误仍然发生。
| 归档时间: |
|
| 查看次数: |
5763 次 |
| 最近记录: |