使用sqlitecursorloader从intentservice插入到sqlite中

时间:2014-03-21 13:19:40

标签: android sqlite intentservice commonsware-cwac

我正在使用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开发的新手。

1 个答案:

答案 0 :(得分:2)

Loader放在静态数据成员中对任何Loader都不好,更不用说SQLiteCursorLoader了,因为你会泄漏Activity

我现在也正式停止SQLiteCursorLoader

或者:

  • 切换为使用ContentProvider和常规CursorLoader,或

  • 使用活动总线(LocalBroadcastManager,Square的Otto,greenrobot的EventBus等)让您的服务通知您的UI层根据您的更改自行刷新< / p>