Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 读取包含blob内容的表时出现Android SQLite游标问题_Java_Android_Sqlite - Fatal编程技术网

Java 读取包含blob内容的表时出现Android SQLite游标问题

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

我的应用程序的少数用户报告了以下异常。但是,在我的本地设备上尝试时,我没有得到相同的异常。 需要关于如何解决问题的建议

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数据的代码如下

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时,性能会受到影响。