我正在使用commonsware的sqlitecursorloader lib。我在Intentservice中收到GCM消息,并希望在sqlite数据库中插入一个条目。如果应用程序处于打开状态,它应该更新列表视图。
我尝试在初始化加载器的活动中使用它:
public static void createDbEntry(String Title, String Message) {
ContentValues values=new ContentValues(2);
values.put(DatabaseHelper.TITLE, Title);
values.put(DatabaseHelper.MESSAGE, Message);
loader.insert("constants", DatabaseHelper.TITLE, values);
}
这是在意向服务中:
MainActivity.createDbEntry(title,message);
据我所知,这大部分时间都有效,但如果加载器被回收,我会得到一个nullpointer。
我应该在intentservice中初始化一个新的加载器吗?
请帮助,我是Android开发的新手。
答案 0 :(得分:2)
将Loader
放在静态数据成员中对任何Loader
都不好,更不用说SQLiteCursorLoader
了,因为你会泄漏Activity
。
我现在也正式停止SQLiteCursorLoader
。
或者:
切换为使用ContentProvider
和常规CursorLoader
,或
使用活动总线(LocalBroadcastManager
,Square的Otto,greenrobot的EventBus等)让您的服务通知您的UI层根据您的更改自行刷新< / p>