如何在多个Android活动之间共享sqite数据库?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (75)

两个或多个Android活动可以打开sqlite 3数据库进行写入吗?

我有两个活动需要将数据插入到同一个sqite数据库中。当第二个活动调用SQLiteOpenHelper.getWriteableDatabase()抛出一个IllegalStateException:"SQLiteDatabase created and never closed".

我已经能够避免异常,使我的数据库对象是一个单例,但我认为一定有更好的方法。

提问于
用户回答回答于

一次只有一个活动在运行。解决这个问题的简单方法是在启动第二个活动之前让第一个活动关闭它的连接。可以在onPace()中这样做,然后在onResume()中重新打开它。类似的东西:

MyActivity {
    OnResume()
        open connection to database
    OnPause()
        close connection to database
}

这样,一次就不会尝试拥有一个以上的连接,并且连接总是可用的。

用户回答回答于

在点击用户界面一段时间后,这会导致我的应用程序启动和完成活动,我最终会得到例外:

ERROR/Database(17657): Leak found
ERROR/Database(17657): java.lang.IllegalStateException:
      /data/data/yourpackage/databases/yourdatabase 
      SQLiteDatabase created and never closed
ERROR/Database(17657): at android.database.sqlite.SQLiteDatabase.<init>
     (SQLiteDatabase.java:1694)

异常不是来自当前处于前台的活动,而是来自一段时间前完成的活动。解决方案只是关闭子活动中的连接。onDesty()事件是正确的位置:

@Override    
protected void onDestroy() {        
    super.onDestroy();
    myAdapter.close();
}

扫码关注云+社区