簡體   English   中英

使用LiveData觀察房間DAO不會被觸發

[英]Observing Room DAO with LiveData not being triggered

嘗試使LiveData與Room一起使用:

有實體對象:

@Entity
public class TimeEntry{
....

道:

@Dao
public interface TimeEntryDAO {
    @Query("SELECT * FROM " + TimeEntry.TIME_TABLE_NAME)
    LiveData<List<TimeEntry>> getAll();
...

活動內部:

protected void onCreate(Bundle savedInstanceState) {
...
        AppDatabase db = AppDatabase.getInstance(mContext);
        db = AppDatabase.getInstance(getApplicationContext());
        tDAO = db.timeEntryDao();
        tDAO.getAll().observe(this, new Observer<List<TimeEntry>>() {
            @Override
            public void onChanged(@Nullable List<TimeEntry> mTimeEntries) {
                if (mTimeEntries != null) {
                    loadSelectedDates(mTimeEntries); //updates a calendarUI
                }
            }
        });
        requestImmediateTimeSync(SyncAdapter.GET_USER_TIMES); //Calls syncAdapter
...

在SyncAdapter內部:

public void onPerformSync(....
...
    AppDatabase db = AppDatabase.getInstance(mContext);
    TimeEntryDAO tDAO;
    tDAO = db.timeEntryDao();
...
    tDAO.insertAll(new TimeEntry(...))
    ...

我一直希望在我的活動中,因為我正在觀察tDAO.getAll(),所以它將在完成同步后刷新日歷。 現在,您必須重新加載活動以獲取執行同步后放入數據庫的數據。 我是Room和LiveData的新手。 有任何想法嗎? 希望我沒有花太多的代碼,這是到目前為止的一個相當大的應用程序。

我最終使用了SyncObserver而不是實時數據,因為SyncAdapter確實是我應該監視的對象。 以下是一些摘要:

    ContentResolver.requestSync(MainActivity.mAccount, getApplicationContext().getResources().getString(R.string.authority), bundle);
...
    final int mask = ContentResolver.SYNC_OBSERVER_TYPE_ACTIVE;
    mSyncObserverHandle = ContentResolver.addStatusChangeListener(mask, mSyncStatusObserver);

稍后的:

private SyncStatusObserver mSyncStatusObserver = new SyncStatusObserver() {
        @Override
        public void onStatusChanged(final int which) {
        //Check to see if DAO has anything here, if so, run this thread
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                //Do the update thing
            }
         }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM