【发布时间】:2017-12-24 08:49:38
【问题描述】:
我正在使用 Android 的 Room 库来创建数据库。它有一个简单的表格,其中包含 id、日期、标题、文本、地址和图像。
当我尝试将字节数组插入表中时出现问题(我通过 for 循环使用测试条目进行测试)。我正在将图像转换为byte[]。当我放置简单的字符串而不是图像时,它可以正常工作。
这是错误:
Failed to read row 0, column 0 from a CursorWindow which has 0 rows, 6 columns.
FATAL EXCEPTION: AsyncTask #1
Process: com.database.test.app, PID: 18552
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:309)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.IllegalStateException: Couldn't read row 0, col 0 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
at android.database.CursorWindow.nativeGetLong(Native Method)
at android.database.CursorWindow.getLong(CursorWindow.java:524)
at android.database.AbstractWindowedCursor.getLong(AbstractWindowedCursor.java:75)
at com.database.test.app.EntryDao_Impl.getAllEntries(EntryDao_Impl.java:183)
at com.database.test.app.MainActivity$CreateAndExportBase.doInBackground(MainActivity.java:191)
at com.database.test.app.MainActivity$CreateAndExportBase.doInBackground(MainActivity.java:151)
at android.os.AsyncTask$2.call(AsyncTask.java:295)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
【问题讨论】:
-
为什么要尝试将二进制文件保存到数据库中?
-
我必须在数据库中插入一张图片。
-
您不应该使用数据库来存储文件。将它们放入应用程序数据目录并在数据库中保存路径。
-
我必须将它们插入到 db 中,因为我将 db 作为备份文件导出。会有很多图片。
-
光标窗口有一个依赖于系统的限制(通常为 2mb),您的图像可能会超过该限制。
标签: android arrays database sqlite android-room