Android 尝试从RoomDatabase实例检索值时引发的IlegalStateException

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

我使用安卓新架构组件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 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"