我正在使用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/