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