为了填充回收者视图,调用以下方法来获取所有order
:
public ArrayList<Order> getAll(){
ArrayList<Order> items = new ArrayList<>();
Cursor cursor = getDatabase().getReadableDatabase()
.rawQuery("select * from " + OrderEntry.TABLE_NAME ,null);
if (cursor.moveToFirst()) {
while (cursor.isAfterLast() == false) {
Order item;
item = cursorToItem(cursor);
items.add(item);
cursor.moveToNext();
}
}
cursor.close();
getDatabase().close();
return items;
}
我正在以严格模式运行我的应用程序并测试和使用真实设备(荣誉4c)。如果我注释掉有光标的行(从if之前的行到if之后的行),代码不会给出任何错误。这是我现在得到的错误:
01-15 09:47:10.667 15301-15309/com.example.myapp E/StrictMode: A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
java.lang.Throwable: Explicit termination method 'close' not called
at dalvik.system.CloseGuard.open(CloseGuard.java:180)
at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:830)
at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:811)
at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:714)
at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:649)
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:235)
at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:199)
at com.example.myapp.Data.Storage.OrderDbHelper.getAll(OrderDbHelper.java:70)
at com.example.myapp.Data.Order.getAll(Order.java:171)
at com.example.myapp.ReceiptsActivity.onResume(ReceiptsActivity.java:57)
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1266)
at android.app.Activity.performResume(Activity.java:6446)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3122)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3163)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2509)
at android.app.ActivityThread.access$900(ActivityThread.java:165)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1368)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:150)
at android.app.ActivityThread.main(ActivityThread.java:5546)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)
我正在关闭光标,出了什么问题?
答案 0 :(得分:1)
您没有关闭getReadableDatabase()
返回的数据库对象。 getDatabase()
作用于另一个对象,或者其他一些函数重新使用它并忘记关闭它。