1
我使用SQLite數據庫將數據存儲在我的應用程序中。下面是我如何訪問上的AsyncTask數據的樣本:OutOfMemoryError:沒有堆棧可用
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());'這是一個無限循環。你只是讀第一張唱片,永遠 – njzk2
你的意思是'} while(c.moveToNext());' –
男人我不敢相信我沒有發現!非常感謝 :) – Rogue