Java 读取包含blob内容的表时出现Android SQLite游标问题
我的应用程序的少数用户报告了以下异常。但是,在我的本地设备上尝试时,我没有得到相同的异常。 需要关于如何解决问题的建议 java.lang.IllegalStateException:无法从CursorWindow读取第0行、第0列。在从光标访问数据之前,请确保光标已正确初始化。 位于android.database.CursorWindow.nativeGetLong(本机方法) 位于android.database.CursorWindow.getLong(CursorWindow.java:507) 位于android.database.AbstractWindowedCursor.getLong(AbstractWindowedCursor.java:75) 位于android.database.AbstractCursor.moveToPosition(AbstractCursor.java:220) 位于android.database.AbstractCursor.moveToFirst(AbstractCursor.java:237) 以下是上下文的详细信息: 将图像存储为blob的表出现异常。表定义是 照片id字符串, blob_图像blob blob_日期字符串 获取blob数据的代码如下Java 读取包含blob内容的表时出现Android SQLite游标问题,java,android,sqlite,Java,Android,Sqlite,我的应用程序的少数用户报告了以下异常。但是,在我的本地设备上尝试时,我没有得到相同的异常。 需要关于如何解决问题的建议 java.lang.IllegalStateException:无法从CursorWindow读取第0行、第0列。在从光标访问数据之前,请确保光标已正确初始化。 位于android.database.CursorWindow.nativeGetLong(本机方法) 位于android.database.CursorWindow.getLong(CursorWindow.java
byte[] photo= null;
Cursor cursor = null;
String criteria = " photo_id = ?";
String[] arguments = {photoid};
try {
cursor = database.query("MY_GALLERY", null,criteria, arguments, null, null, null);
if(null !=cursor){
int rowCount = cursor.getCount();
if(rowCount>0){
cursor.moveToFirst();
int colIndex = cursor.getColumnIndex("blob_image");
if (colIndex != -1) {
photo = cursor.getBlob(colIndex));
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
由于我在检查cursor.getCount()后,仅当行计数大于0时才尝试获取blob值,因此我发现这很困难
为什么会将CURSOR初始化作为问题提出。
我还尝试检查正在保存的图像的大小。它们的大小小于400kb
使用安卓版本4.4.4的Nexus 7和安卓版本4.4的三星平板电脑SM-T116NY的用户也报告了此错误
这个应用程序已经使用了两年多,我第一次收到这个问题
我已经检查了类似的和相关的问题,以及提到的大多数建议[关于适当的数据库初始化,
光标索引的处理、光标的打开/关闭、小于2mb的行大小限制都得到了考虑]
将其存储在DB中的一个原因是要有一个备用存储,用户不会错误地删除内容。
在应用程序中,只有在文件系统中找不到映像时,才会使用DB中的映像
有什么建议吗
谢谢
Pradeep
“将其存储在DB中的原因之一是有一个备用存储,用户不会错误地删除内容”
您的数据库也可能被错误地删除。在这种情况下,我认为它类似于“清除数据”的情况,相关数据是从服务器获取的。我还将blob写入文件夹,因为我发现在大多数用例中从sqlite db读取blob时,性能会受到影响。