【问题标题】:error cursor don't close Android错误光标不关闭Android
【发布时间】:2013-05-30 23:01:23
【问题描述】:

首先要说的是应用运行良好,但是日志中有这个光标的错误:

public Cursor getDiff() {
        SQLiteDatabase db = this.getReadableDatabase();
        String sacaDif = "SELECT dificultad FROM " + people;
        Cursor c = db.rawQuery(sacaDif, null);
        return c;
    }

我知道是因为我没有关闭它,但是我无法在发送之前或之后关闭光标...

这是日志文件:

05-30 14:48:16.011: D/dalvikvm(363): GC_FOR_MALLOC freed 4814 objects / 256176 bytes in 100ms
05-30 14:48:16.039: E/Cursor(363): Finalizing a Cursor that has not been deactivated or closed. database = /data/data/com.example.proyecto008almacenardatossharedpreferences/databases/administracion, table = null, query = SELECT dificultad FROM dificultad
05-30 14:48:16.039: E/Cursor(363): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
05-30 14:48:16.039: E/Cursor(363):  at android.database.sqlite.SQLiteCursor.<init>(SQLiteCursor.java:210)
05-30 14:48:16.039: E/Cursor(363):  at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:53)
05-30 14:48:16.039: E/Cursor(363):  at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345)
05-30 14:48:16.039: E/Cursor(363):  at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1315)
05-30 14:48:16.039: E/Cursor(363):  at com.example.proyecto008almacenardatossharedpreferences.CreaTablas.getDiff(CreaTablas.java:47)
05-30 14:48:16.039: E/Cursor(363):  at com.example.proyecto008almacenardatossharedpreferences.Opciones.onCreate(Opciones.java:25)
05-30 14:48:16.039: E/Cursor(363):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-30 14:48:16.039: E/Cursor(363):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
05-30 14:48:16.039: E/Cursor(363):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
05-30 14:48:16.039: E/Cursor(363):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
05-30 14:48:16.039: E/Cursor(363):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
05-30 14:48:16.039: E/Cursor(363):  at android.os.Handler.dispatchMessage(Handler.java:99)
05-30 14:48:16.039: E/Cursor(363):  at android.os.Looper.loop(Looper.java:123)
05-30 14:48:16.039: E/Cursor(363):  at android.app.ActivityThread.main(ActivityThread.java:4627)
05-30 14:48:16.039: E/Cursor(363):  at java.lang.reflect.Method.invokeNative(Native Method)
05-30 14:48:16.039: E/Cursor(363):  at java.lang.reflect.Method.invoke(Method.java:521)
05-30 14:48:16.039: E/Cursor(363):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-30 14:48:16.039: E/Cursor(363):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-30 14:48:16.039: E/Cursor(363):  at dalvik.system.NativeStart.main(Native Method)

我能做些什么来阻止这个错误? 谢谢

【问题讨论】:

  • 你从来没有在光标上调用过 close() 吗?
  • 为什么不返回数据而不是光标?
  • 如果我在发送之前执行 c.close() 将不起作用.. 我会尝试返回数据
  • 问题解决了,我做到了@Seraphim 说的。谢谢!
  • @user2433216 如果您觉得它有用,请点击它;)总是乐于提供帮助!

标签: android android-sqlite android-cursor


【解决方案1】:

将数据存储在 pojo 类对象中并返回而不是返回游标。这是最佳做法。

【讨论】:

  • 感谢您的帮助,我知道 pojo 类是最好的解决方案,但它是一个小应用程序,没有必要;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-07
  • 1970-01-01
  • 2011-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多