我有:一个 SQLITE 数据库,其中包含一个表和一个包含大字符串的 "text"
类型的数据字段。字符串的大小为:
select length(mapdata) from mapobjects
结果:
29386
94111
95558
127952
35593
我尝试在我的安卓应用程序中读取数据,如下所示
c = chronica_connection_read.rawQuery(sql, null);
c.moveToFirst();
while (!c.isAfterLast()) {
String mapdata = c.getString(c.getColumnIndex("mapdata"));
我得到:
java.lang.OutOfMemoryError: Failed to allocate a 58792 byte allocation with 14504 free bytes and 14KB until OOM
at android.database.CursorWindow.nativeGetString(Native Method)
at android.database.CursorWindow.getString(CursorWindow.java:438)
at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
我想数据不是那么大,这是真正的内存问题。我想我处理错了。有关如何阅读文本字段的任何帮助。
您没有正确读取光标中的数据,并且陷入了无限循环
c = chronica_connection_read.rawQuery(sql, null);
if (c.moveToFirst()) {
do {
String mapdata = c.getString(c.getColumnIndex("mapdata"));
// continue your work with the retrieved string
} while (c.moveToNext());
}
您还可以考虑在作业完成后关闭光标
c.close();