W/CursorWindow(15677):窗口已满:请求分配2195889字节,可用空间2096720字节,窗口大小2097152字节
我知道有app内存可用:
D/dalvikvm(15677):GC_FOR_ALLOC释放9K,30%免费17050K/24291K,暂停45ms
因此,它纯粹是做光标大小的窗口,阅读时blob进入byte[].
我使用内置方法从游标中读取blob.
try
{
c = rdb.query("Photos", new String[]{"photo"}, "id = ?", new String[]{""+photoID}, null, null, null);
if(c.moveToFirst())
{
byte[] tArray = c.getBlob(c.getColumnIndex("photo")); // THIS LINE ERRORS
}
}catch(Exception e)
{
e.printStackTrace();
}
c.close();
return tArray;
Run Code Online (Sandbox Code Playgroud)
有没有解决的办法?窗口大小似乎限制为2097152字节.
在 Crashlytics 上,我看到许多 Room 异常都带有以下消息:“在访问光标之前确保光标已正确初始化”。我无法在我的设备上产生此错误,并且该错误不会发生在特定的 Android 版本或设备型号上。
我在 Room 上找不到有关此错误的任何信息。SQLLite 存在一些问题,其中大多数是关于手工编写的有问题的 SQL 查询。
即使这个简单的查询在客户设备上也会出现错误。
@Query("SELECT * FROM UserAction WHERE UserAction.userId LIKE :userId " +
" ORDER BY last_update_time DESC")
public List<UserAction> allList(String usedId);
Run Code Online (Sandbox Code Playgroud)
例外的是:
致命异常:java.lang.IllegalStateException:无法从 CursorWindow 读取第 1756 行、第 0 列。在访问游标中的数据之前,请确保游标已正确初始化。在 android.database.CursorWindow.nativeGetString(CursorWindow.java) 在 android.database.CursorWindow.getString(CursorWindow.java:438) 在 android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:66)
错误发生在 while 循环内生成的代码上
while(_cursor.moveToNext()) {
final UserAction _item;
_item = new UserAction();
_item.userId = _cursor.getString(_cursorIndexOfUserId); //Exception here
Run Code Online (Sandbox Code Playgroud)