Android 处理异步SQLite数据库行添加

Android 处理异步SQLite数据库行添加,android,sqlite,events,Android,Sqlite,Events,我正在开发由两部分组成的应用程序:活动和广播接收器。BroadcastReceiver处理传入的SMS,并可能在数据库中创建新行 我有一个问题:当BroadcastReceiver向数据库添加新行时,若活动已打开并处于活动状态,则新行不会出现在活动的ListView中 我尝试对listView的游标使用游标观察器,但该观察器仅在行更改时触发通知。在新行中,添加该观察者不执行任何操作 下面是代码示例: m_testCursor = m_dbAdapter.fetchAll(); m_testCur

我正在开发由两部分组成的应用程序:活动和广播接收器。BroadcastReceiver处理传入的SMS,并可能在数据库中创建新行

我有一个问题:当BroadcastReceiver向数据库添加新行时,若活动已打开并处于活动状态,则新行不会出现在活动的ListView中

我尝试对listView的游标使用游标观察器,但该观察器仅在行更改时触发通知。在新行中,添加该观察者不执行任何操作

下面是代码示例:

m_testCursor = m_dbAdapter.fetchAll();
m_testCursor.registerContentObserver(
    new ContentObserver(new Handler()) 
    {
        @Override
        public void onChange(boolean selfChange)
        {
            Log.w("my_tag", "test content changed");                    
        }
    }
);

m_testCursor.registerDataSetObserver(
    new DataSetObserver()  
    {
        @Override
        public void onChanged()
        {
            Log.w("my_tag", "test data set changed");                       
        }
    }
);

SimpleCursorAdapter checks = new SimpleCursorAdapter(this, R.layout.nodes_row, m_testCursor, from, to);
setListAdapter(checks);

我可以从广播接收器部分处理活动中的新行添加吗?我只需要触发一个UI刷新方法。

是否检查广播接收器中可用的对象?如果是这样,并且您只需要UI刷新方法,我认为您应该在数据集更改时调用
checks.notifiDatasetChanged()

您可以在光标上调用,并在数据库更改后在
ContentResolver
上调用。要获取ContentResolver,请调用
getContentResolver()
。在两个调用中使用相同的uri

在你的活动中

Uri uri = Uri.parse("content://your_database");
m_testCursor = m_dbAdapter.fetchAll();
m_testCursor.setNotificationUri(getContentResolver(),uri)
在数据库中创建/更新/删除更改后的方法

Uri uri = Uri.parse("content://your_database");
getContentResolver().notifyChange(uri, null);
您还可以在
fetchAll()
方法中直接调用
setNotificationUri()
,并将Uri定义为db类的静态最终实例变量