android - 未能分配 83070912 字节分配,其中 25165824 空闲字节和 34MB 直到 OOM,最大允许占用空间 525798800,增长限制 536870912
问题描述
我真的被困住了。我熟悉 Java 和 Android 开发,但我没有任何数据库经验。
public ArrayList<String> getIstilah(int dicType){
String tableName = getTableName(dicType);
String q = "SELECT * FROM "+tableName;
Cursor result = sDB.rawQuery(q, null);
ArrayList<String> source = new ArrayList<>();
while (result.moveToFirst()){
source.add(result.getString(result.getColumnIndex(COL_JUDUL)));// line 97
}
return source;
}
2019-10-31 16:36:16.881 2267-2267/? E/Zygote: isWhitelistProcess - 进程被列入白名单 2019-10-31 16:36:16.884 2267-2267/? E/Zygote:accessInfo:1 2019-10-31 16:36:42.843 2267-2267/id.AntBeeDev.ContohKamus E/AndroidRuntime:致命异常:主进程:id.AntBeeDev.ContohKamus,PID:2267 java.lang.OutOfMemoryError :无法分配 83070912 字节分配,其中 25165824 个可用字节和 34MB 直到 OOM,最大允许占用空间 525798768,增长限制 536870912 在 java.util.Arrays.copyOf(Arrays.java:3139) 在 java.util.Arrays.copyOf(Arrays .java:3109) 在 java.util.ArrayList.grow(ArrayList.java:275) 在 java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:249) 在 java.util.ArrayList.ensureCapacityInternal(ArrayList.java:241)在 java.util.ArrayList.add(ArrayList.java:
解决方案
您获得光标并移动到第一行将数据添加到数组中,然后移动到第一行并永远添加数据(只要查询已提取了 1 行或更多行)。
您应该使用moveToNext而不是moveToFirst(最初将移动到第一行,因为光标最初位于第一行之前 (位置 -1))例如:-
while (result.moveToNext()){
source.add(result.getString(result.getColumnIndex(COL_JUDUL)));// line 97
}
result.close(); //<<<<<<<<<< SHOULD ALWAYS CLOSE CURSORS WHEN DONE WITH THEM
return source;
推荐阅读
- r - 将数据帧的每一行乘以它的向量 R
- sql - 如何在汇总数据中获取缺失周的数据
- apache - Keykcloak + apache mod_auth_openidc + zabbix HTTP AUTH
- javascript - 使用 jquery post 和 php 上传文件
- apache - 无法在重写规则中捕获数据
- networking - 从对等体列表中排列兼容性矩阵
- django - 循环后django模型实例值设置为none
- postgresql - 将 docker 恢复到之前的状态
- java - EnumSet 方法不会将任何枚举类型识别为枚举
- c++ - 为什么当我输入 stop 时我的 while 循环不会停止?