java - 应用程序关闭时写入数据库

标签 java android sqliteopenhelper

我正在使用gcm用于聊天,我有一个 onMessageReceived()接收消息、将消息保存在数据库中并向用户发送通知的方法。

当应用程序运行(或暂停 - 在后台运行)时,这就是我在数据库中存储消息的方式:

private DBHelper mDbHelper;
mDbHelper = new DBHelper(MainApplication.getAppContext());
SQLiteDatabase db = mDbHelper.getWritableDatabase();

方法getAppContext()是我的主要 Activity 中的一个静态方法,它返回上下文。

这一切都有效。我收到一条消息,成功保存它,并收到通知(当应用程序运行时或在后台时)

问题出在应用程序关闭时。我无法使用MainApplication.getAppContext(); ,因为应用程序关闭时没有上下文。

也许我应该以其他方式传递上下文?

<小时/>

<罢工>更新

<罢工>

最终,如果应用程序关闭,我会将消息保存在服务器上,当用户打开它时,我会从服务器获取消息,从那里删除它们,然后将它们保存在用户的设备上。 (就像 queue pop 操作...)

如果有更好的方法请告诉我
查看已接受的答案...

最佳答案

好吧,一年后我再次需要这个,我找到了答案:

事实证明,SQLiteOpenHelper 中有一个静态方法,可以在没有上下文的情况下打开数据库:openDatabase() .

所以替换这个:

mDbHelper = new DBHelper(MainApplication.getContext());
db = mDbHelper.getWritableDatabase();

这样:

db = SQLiteDatabase.openDatabase("path/to/database.db", null, OPEN_READWRITE);

静态方法openDatabase()不需要上下文,因此即使应用程序关闭,我们也可以调用它。

关于java - 应用程序关闭时写入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32009261/

相关文章:

java - 如何从 java.sql.Connection 获取数据库 url?

java - 正则表达式模式的困难

java - 如何找出 Clojure 函数允许的选项(spit)?

java - Android:getContext().getContentResolver() 有时会出现 NullPointerException

android - 如何在 eclipse 上安装 jcodec?

android - Android抽象类SQLiteOpenHelper中的version是什么意思

java - MyContentProvider.onCreate() 没有被调用?

java - 以 TreeMap<K, V> 作为参数的简单泛型方法

android - 何时启动和停止应用内结算服务?

android - SQLiteOpenHelper onCreate()/onUpgrade() 何时运行?