Android 尝试从RoomDatabase实例检索值时引发的IlegalStateException
我使用安卓新架构组件room进行数据库操作,当我试图从数据库检索对象时遇到了麻烦Android 尝试从RoomDatabase实例检索值时引发的IlegalStateException,android,sqlite,kotlin,android-room,Android,Sqlite,Kotlin,Android Room,我使用安卓新架构组件room进行数据库操作,当我试图从数据库检索对象时遇到了麻烦 Couldn't read row 0, col 0 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it. 这是我的Dao接口 @Dao interface BookDao { @Query("SELECT * FROM books") fun getAllB
Couldn't read row 0, col 0 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
这是我的Dao接口
@Dao
interface BookDao {
@Query("SELECT * FROM books")
fun getAllBooks() : List<Book>
@Insert
fun saveBook(book: Book)
@Query("DELETE FROM books")
fun deleteBookTable()
}
这是RoomDatabase子类
@Database(entities = arrayOf(Book::class), version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun bookDao(): BookDao
companion object {
@Volatile private var INSTANCE: AppDatabase? = null
fun getInstance(context: Context): AppDatabase =
INSTANCE ?: synchronized(this) {
INSTANCE ?: buildDatabase(context).also { INSTANCE = it }
}
private fun buildDatabase(context: Context) =
Room.databaseBuilder(context.applicationContext,
AppDatabase::class.java, "booksDB.db")
.build()
}
}
这就是我调用这个方法的代码块
private val db: AppDatabase by lazy { AppDatabase.getInstance(this) }
override fun onCreate(savedInstanceState: Bundle?) {
doAsync { // from anko library
for (i in 0..10){
val book = Book("$i", tmpImgRes, "tmpPath", tmpBytes)
db.bookDao().saveBook(book)
}
val books = db.bookDao().getAllBooks()
}
}
当我试图调用getAllBooks()时抛出异常
会议室实施:
implementation "android.arch.persistence.room:runtime:1.0.0-rc1"
annotationProcessor "android.arch.persistence.room:compiler:1.0.0-rc1"
我解决了我的问题,实际的问题,在SQLite表行大小中,当我试图从表中获取数据时,该行包含超过2.5 MB的数据,但在SQLite数据库中不正常,然后我通过拆分字节数组并按块保存来减少数据大小,之后一切都很好地工作,获取后,我将其合并为原始版本您找到解决方案了吗@Jemoyes,在我的案例中,每个sqlite db行中的大小都存在问题,我在那里保存了超过2.5MB字节的数组,而在我尝试检索时,出现了错误。那么解决方案是什么呢?拆分字节的数据,例如:我有18MB的数据要存储在db中,我将其切片为1MB字节的数组,比我想读取它时选择它并合并,这就是全部。请将您的解决方案作为答案发布。它将帮助其他人。
implementation "android.arch.persistence.room:runtime:1.0.0-rc1"
annotationProcessor "android.arch.persistence.room:compiler:1.0.0-rc1"