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

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

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

两个或多个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
}

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

用户回答回答于

我也有多个活动,每个活动都打开自己的数据库连接。在开始其他活动时,我会保持主活动的活力,并且当我不再需要子活动时,我会对它们调用Finish()。

我看到的是,一个子活动可以成功地打开连接和查询数据,而主Actity仍然保留它的DBAdapter。当子活动结束时,主活动请求打开的所有游标。这似乎是自动发生的。在点击用户界面一段时间后,这会导致我的应用程序启动和完成活动,我最终会得到异常:

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();
}

扫码关注云+社区