Android 架构组件房间库 - 如何处理来自 DAO 的实时数据

Android architecture component room library - How to handle livedata from DAO

我不清楚如何设置 return 从 room 中的 dao 编辑的实时数据。让我们看一下 room 中的 DAO 示例:

    @Dao
public interface EventDao {

   @Query("SELECT * FROM " + Event.TABLE_NAME + " WHERE " + Event.DATE_FIELD + " > :minDate limit 1")
   LiveData<List<Event>> getEvents(LocalDateTime minDate);

   @Insert(onConflict = REPLACE)
   void addEvent(Event event);

   @Delete
   void deleteEvent(Event event);

   @Update(onConflict = REPLACE)
   void updateEvent(Event event);

}

特别是,我想查看 getEvents 查询调用。它将 return liveData 对象中的事件列表。这是如何从呼叫者端调用的?任何人都有 observable/flowable 以及普通旧 java 的例子?

如果您直接从 activity 调用,那么您的 activity 必须扩展 LifecycleActivity .

并编写下面的代码。

db.getEventDao().getEventList().observe(this, new Observer<List<Event>>() {
    @Override
    public void onChanged(@Nullable List<Event> events) {
        // update your UI.
    }

实时数据具有生命周期感知能力。所以实时数据需要知道生命周期。 所以在 observe 方法中,第一个参数需要 LifecycleOwner 的参数,它来自 LifecycleActivity.

如果您不想使用 LifeCycleActivity,那么您必须使用 ViewModel。更喜欢这个 link 以获得更多详细信息 https://developer.android.com/topic/libraries/architecture/viewmodel.html

注意:在当前的 alpha 版本中 LifecycleActivity 没有扩展 AppCompatActivity。在未来的版本中,它将成为支持库的一部分。