gpt4 book ai didi

android - 内存不足错误 : no stack available

转载 作者:行者123 更新时间:2023-11-29 00:11:14 25 4
gpt4 key购买 nike

我使用 SQLite 数据库在我的应用程序中存储数据。这是我如何在异步任务上访问数据的示例:

ArrayList < Data > allMessages = new ArrayList<>();
String query = "SELECT * FROM ..........";
SQLiteDatabase db = this.getWritableDatabase();
Cursor c = db.rawQuery(query, new String[]{username});
try {
if (c.moveToFirst()) {
do {
Data data = new Data(c.getString(0),.....)
allMessages.add(data);
} while (c.moveToFirst());
}
} finally {
c.close();
}

在运行时,我得到这个异常:

java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:304)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.OutOfMemoryError: OutOfMemoryError thrown while trying to throw OutOfMemoryError; no stack available

目前,我的数据库包含大约 20 条记录,我相信这不足以导致内存溢出...

感谢阅读。

最佳答案

你的问题是你只曾经读过第一条记录,因为你使用

} while (c.moveToFirst());

这只会读取第一条记录,并且您的 ArrayList 将填满第一条记录的数百万份副本。您最终会遇到 OutOfMemory 错误.


相反,使用

} while (c.moveToNext());

这将正确读取所有记录。

关于android - 内存不足错误 : no stack available,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29989162/

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