我想調試我遇到的'內存不足'錯誤,所以爲了濃縮我的示例以達到幫助的目的,我有一個按鈕,點擊它時查詢該數據庫並將所有值返回到ArrayList中,然後使用ArrayList來填充RecyclerView。這是成功的,但是如果我再次按下按鈕,會發生「內存不足」錯誤。查詢返回的數據量非常大,從日誌中我可以看到,只需按下一次按鈕,就沒有太多的內存可用(在仿真器上運行)。我來到這個結論來自該行的日誌中:Android的sqlite光標 - 內存不足
com.wizzkidd.myapp D/dalvikvm: GC_FOR_ALLOC freed 1459K, 2% free 91444K/93016K, paused 40ms, total 40ms
,正如前文所述,按鈕的第二次按下給出了這樣的錯誤:
com.wizzkidd.myapp E/dalvikvm-heap: Out of memory on a 152-byte allocation.
錯誤指向到我的數據庫幫助類,更具體地說,這段代碼:
public List<MyInfo> getAllFromDb() {
List<MyInfo> myArrayList= new ArrayList<MyInfo>();
String selectQuery = "SELECT * FROM myTable";
SQLiteDatabase sqLiteDatabase = this.getReadableDatabase();
Cursor cursor = sqLiteDatabase.rawQuery(selectQuery, null);
try {
if (cursor.moveToFirst()) {
do {
MyInfo myInfo = new MyInfo();
myInfo.setTitle(cursor.getString(0));
myInfo.setDescription(cursor.getString(1));
myArrayList.add(myInfo);
} while (cursor.moveToNext());
}
} catch (Exception e) {
Log.d(TAG, "Error while trying to get data from database");
} finally {
if (cursor != null && !cursor.isClosed()) {
cursor.close();
}
}
return tvGuideInfoList;
}
我研究過了pr在這裏關於SO的透露文章和大多數答案都說遊標必須在finally塊中關閉。但正如你上面看到的,我已經在做這個。
你在myTable中有多少條記錄? – developer
'myTable'中有多少條記錄?他們是否包含斑點?此外,'myArrayList.add(MyInfo);'是錯誤的(您添加類,而不是'myInfo'對象)。 – pathfinderelite
@pathfinderelite我做了一個類型,我編輯了我的帖子。 – WizzKidd