【发布时间】:2015-02-24 17:31:26
【问题描述】:
我的 Android 应用程序中有一个 SQLite 数据库。当我执行一项操作时,我总是得到一个尚未停用或关闭的完成光标。方法如下:
public String getKey(){
net.sqlcipher.database.SQLiteDatabase db = this.getWritableDatabase(Login.authPass);
String selectQuery = "SELECT * FROM " + STABLE;
Cursor cursor = db.rawQuery(selectQuery, null); //This is the line that throws the exception
String s = cursor.getString(1);
cursor.close();
db.close();
return s;
}
这真的很令人沮丧,因为我要关闭光标,它甚至在它到达之前就抛出了一个异常。我也不明白我在这条线上所做的任何事情是如何被认为是完成光标的。谢谢。
编辑添加Logcat:
02-24 12:28:26.522 12756-12765/com.itsmr.dre2k14 E/Cursor: 完成尚未停用或关闭的光标。数据库 = /data/data/com.itsmr.dre2k14/databases/keys.db,表 = null,查询 = SELECT * FROM 键 net.sqlcipher.database.DatabaseObjectNotClosedException:应用程序没有关闭在此处打开的游标或数据库对象 在 net.sqlcipher.database.SQLiteCursor.(SQLiteCursor.java:217) 在 net.sqlcipher.database.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:53) 在 net.sqlcipher.database.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1447) 在 net.sqlcipher.database.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1416) 在 com.itsmr.dre_android_clean.KeyTable.getKey(KeyTable.java:41) 在 com.itsmr.dre_android_clean.Login.noConnectValidate(Login.java:218) 在 com.itsmr.dre_android_clean.Login.connect(Login.java:97) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 android.view.View$1.onClick(View.java:3964) 在 android.view.View.performClick(View.java:4640) 在 android.view.View$PerformClick.run(View.java:19421) 在 android.os.Handler.handleCallback(Handler.java:733) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:136) 在 android.app.ActivityThread.main(ActivityThread.java:5476) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084) 在 dalvik.system.NativeStart.main(Native Method)
【问题讨论】:
-
包含异常的 logcat