2012-03-23 47 views
0

我正在開發由2部分組成的應用程序:Activity和BroadcastReceiver。 BroadcastReceiver處理傳入的SMS並可能在數據庫中創建新行。處理異步SQLite數據庫行添加

我有一個問題:如果活動打開並處於活動狀態,而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刷新方法。

回答

0

請問checks對象在廣播接收器中可用嗎?如果是這樣,如果你只需要UI刷新方法,我認爲你應該簡單地在數據集改變時調用checks.notifiDatasetChanged()

0

您可以在您的光標上撥打setNotificationUri(),並在ContentResolver上更改db調用notifyChange()。獲取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類的靜態最終實例變量。