Gab*_*ode 10 android typeconverter kotlin android-room
java.lang.IllegalArgumentException:数据库配置中缺少 ArticlesDao 所需的类型转换器(类 SourceConverter)。
我在编译(运行时)我的应用程序时发生崩溃,因为根据显示的错误,我的数据库配置中缺少转换器。我该如何解决这个问题?我需要帮助。
源码如下:
源转换器.kt
@ProvidedTypeConverter
internal class SourceConverter {
@TypeConverter
fun stringToSource(string: String?): SourceEntity = Gson().fromJson(string, SourceEntity::class.java)
@TypeConverter
fun sourceToString(list: SourceEntity?): String = Gson().toJson(list)
}
Run Code Online (Sandbox Code Playgroud)
文章实体.kt
@Entity(tableName = "article")
data class ArticleEntity(
@TypeConverters(SourceConverter::class)
@SerializedName("source")
var source: SourceEntity? = null,
@SerializedName("author")
var author: String? = null,
@SerializedName("title")
var title: String? = null,
@SerializedName("description")
var description: String? = null,
@SerializedName("url")
@NonNull @PrimaryKey var url: String,
@SerializedName("urlToImage")
var urlToImage: String? = null,
@SerializedName("publishedAt")
var publishedAt: String? = null,
@SerializedName("content")
var content: String? = null
)
Run Code Online (Sandbox Code Playgroud)
文章道.kt
@Dao
interface ArticlesDao {
@Query("select * from article where url = :primaryId")
fun findByPrimaryId(primaryId: String?): ArticleEntity?
@Query("DELETE FROM article WHERE url = :primaryId")
fun deleteByPrimaryId(primaryId: String?): Int
@Query("SELECT * FROM article")
fun getAllArticles(): Flow<List<ArticleEntity>>
@Query("DELETE FROM article")
fun clear()
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(articleEntity: ArticleEntity?): Long
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(vararg articleEntities: ArticleEntity?): LongArray?
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(articleEntityList: List<ArticleEntity?>?): LongArray?
@Update(onConflict = OnConflictStrategy.REPLACE)
fun update(articleEntity: ArticleEntity?): Int
@Update(onConflict = OnConflictStrategy.REPLACE)
fun update(vararg articleEntities: ArticleEntity?): Int
@Update(onConflict = OnConflictStrategy.REPLACE)
fun update(articleEntityList: List<ArticleEntity?>?): Int
@Delete
fun delete(articleEntity: ArticleEntity?): Int
}
Run Code Online (Sandbox Code Playgroud)
应用程序数据库.kt
@Database(entities = [ArticleEntity::class, SourceEntity::class], version = 1, exportSchema = false)
@TypeConverters(SourceConverter::class, ArticleConverter::class)
abstract class AppDatabase : RoomDatabase() {
abstract fun getArticlesDao(): ArticlesDao
abstract fun getSourcesDao(): SourcesDao
companion object {
@Synchronized
fun getInstance(context: Context): AppDatabase {
if (sInstance == null) {
sInstance = Room
.databaseBuilder(
context.applicationContext,
AppDatabase::class.java, "infotify.db"
)
.addTypeConverter(SourceConverter::class.java)
.build()
}
return sInstance as AppDatabase
}
}
}
Run Code Online (Sandbox Code Playgroud)
qia*_*nlv 13
可以通过三种方式将类型转换器添加到房间数据库中。但你应该确保只使用一种方法,否则会出错:
小智 7
代替
Room.databaseBuilder.addTypeConverter(ConverterHelper::class)
Run Code Online (Sandbox Code Playgroud)
用这个:
Room.databaseBuilder.addTypeConverter(ConverterHelper())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3783 次 |
| 最近记录: |