1

我不清楚如何设置从房间中的 dao 返回的实时数据。让我们看一个房间中的示例 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 Query 调用。它将返回 liveData 对象中的事件列表。这是如何从呼叫者端调用的?任何人都有一个可观察/可流动以及普通旧java的例子吗?

4

1 回答 1

3

如果您直接从活动调用,那么您的活动必须扩展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. 首选此链接以获取更多详细信息https://developer.android.com/topic/libraries/architecture/viewmodel.html

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

于 2017-06-05T12:10:33.283 回答