试图让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
...
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
}
}
}
我有一个视图模型,从场景中接收流作为livedata 在活动中,我们订阅了这个livedata,一些逻辑发生并使用了activityResult 当我们返回时,我们会用最后一个状态触发一个观察者,并再次执行之前的导航逻辑 如何忽略返回时具有相同值的观察者触发器?
我尝试使用这个实现ViewModel。但观察者从未被调用。 基本上,这个应用程序在SAMPLE_URL上发出网络请求,将JSON转换为列表,并通过BookView显示列表。这个应用程序在没有ViewModel的情况下工作得很好。使用ViewModel,应用程序会运行,但Observer从未被调用,也没有显示任何数据。 我在这里做错了什么? BookActivity类: BookViewModel类
我有一个片段和一个相应的viewmodel类。我在Fragment方法上从DB获取包装为LiveData的联系人列表。它工作得很好,我使用PagedListAdapter显示联系人列表,如下所示: 我在我的片段中添加了一个观察者,如下所示: 有一个按钮在我的片段,它把我带到另一个屏幕,在那个屏幕上我添加更多的联系人到表。但当我从那个屏幕回到我的片段时,观察者并没有被调用。这意味着返回时不会调用方法
此外,为什么Viewmodel不能观察到它自己的LiveData的变化?
我有一个单独的类来处理数据提取(特别是Firebase),我通常从它返回LiveData对象并异步更新它们。现在我希望将返回的数据存储在ViewModel中,但问题是为了获得所述值,我需要观察从数据提取类返回的LiveData对象。observe方法需要一个LifecycleOwner对象作为第一个参数,但我的ViewModel中显然没有这个对象,而且我知道我不应该在ViewModel中保留对ac