2017-04-21 43 views
1

我有疑問,可以自動還判定是否sqlbrite接近光標,它似乎並沒有做到這一點,因爲我不斷收到:SQLBrite是否自動關閉遊標?

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:809) at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:793)

,但我沒有看到任何docs指出我應該明確要求cursor.close

編輯1

這裏是什麼給了我一個遊標不關閉錯誤的代碼段:

DbProvider.db(getActivity()).createQuery(Item.NAME, sqlQuery, selectionArgs).mapToList(new Func1<Cursor, ItemEntity>() { 
    @Override 
    public ItemEntity call(Cursor cursor) { 
     return new ItemEntity(cursor); 
    } 
}).subscribe(itemEntities -> { 
    Debug.info(this, "items " + itemEntities); 
}, Throwable::printStackTrace,() -> {}); 

回答

1

如果要調用query.run()並獲得您需要手動關閉遊標。如果您使用的是mapToList/mapToOne api,則無需手動關閉它。

+0

問題是我在調用'db.createQuery'之前使用了加載器API,因爲我正在將代碼遷移到sqlbrite,所以它似乎在那裏引發了一個錯誤。 – Necronet

+0

來自sqlitebrite的github問題的官方答案:https://github.com/square/sqlbrite/issues/94 – Necronet