gpt4 book ai didi

java - 无法从 CursorWindow 读取第 34 行第 11 列

转载 作者:行者123 更新时间:2023-12-01 11:43:55 25 4
gpt4 key购买 nike

我收到一些用户的以下错误。

无法从 CursorWindow 读取第 34 行第 11 列。在访问游标中的数据之前,请确保游标已正确初始化。

此问题发生在以下行中:

@Override
public void bindView(final Context context, Cursor MessageCursor, int position) {

final MessageEntity messageEntity = MessageDataSource.cursorToMessage(MessageCursor);

// more code
}

cursorToMessage是:

public static MessageEntity cursorToMessage(Cursor cursor) {
MessageEntity.Builder builder = new MessageEntity.Builder();
builder.setId(cursor.getLong(cursor.getColumnIndexOrThrow(MessageTable.COLUMN_ID)))
.setMessageId(cursor.getString(cursor.getColumnIndexOrThrow(MessageTable.COLUMN_MESSAGE_ID)))
.setJabberId(cursor.getString(cursor.getColumnIndexOrThrow(MessageTable.COLUMN_JID)))
.setContactUsername(cursor.getString(cursor.getColumnIndexOrThrow(MessageTable.COLUMN_CONTACT_USERNAME)))
.setText(cursor.getString(cursor.getColumnIndexOrThrow(MessageTable.COLUMN_TEXT)))
.setType(MessageEntity.Type.getEnum(cursor.getString(cursor.getColumnIndexOrThrow(MessageTable.COLUMN_TYPE))))
.setTimestamp(cursor.getString(cursor.getColumnIndexOrThrow(MessageTable.COLUMN_TIMESTAMP)))
.setDeliveryStatus(MessageEntity.DeliveryStatus.getEnum(cursor.getString(cursor.getColumnIndexOrThrow(MessageTable.COLUMN_STATUS))))
.setUnread((cursor.getInt(cursor.getColumnIndexOrThrow(MessageTable.COLUMN_UNREAD)) > 0))
.setOutgoing((cursor.getInt(cursor.getColumnIndexOrThrow(MessageTable.COLUMN_OUTGOING)) > 0))
.setThumbnail(cursor.getString(cursor.getColumnIndexOrThrow(MessageTable.COLUMN_THUMBNAIL)))
.setJsonData(cursor.getString(cursor.getColumnIndexOrThrow(MessageTable.COLUMN_EXTRA_DATA)));

return builder.build();
}

我在 SO 中搜索了很多,但其他问题比如无法读取行 -1 或无法读取列 -1,这是由于您不调用 moveToFirst() 造成的或者您没有一栏。由于这个问题发生在某些用户身上,我无法检测为什么会发生这种情况。你有什么想法吗?

如果您想要更多信息或更多代码,请告诉我。提前致谢。

编辑

我的投影null并且我拥有所有列。并非所有用户都会出现此问题。

更新

我的问题是内存不足,因为我在项目的一个地方捕获了该异常,应用程序在其他地方崩溃了。

最佳答案

不要在 Android SQLite 数据库中存储大量数据。 CursorWindow 只能容纳 2MB 的数据,任何大于该数据的行都会导致这样的错误。

特别是,COLUMN_THUMBNAIL 似乎是罪魁祸首。不是将图像数据存储在数据库中,而是将图像存储在文件系统中,并且仅将路径存储在数据库中。

仅供引用,异常(exception) gets thrown每当CursorWindow::getFieldSlot()返回NULL。越界索引是常见的原因,但您的情况并非如此 - 行号和列号都是有效的。完整的光标窗口是另一个原因。

关于java - 无法从 CursorWindow 读取第 34 行第 11 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29314175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com