【问题标题】:Android architecture component room library - How to handle livedata from DAOAndroid架构组件室库——如何处理来自DAO的livedata
【发布时间】:2017-06-05 00:18:13
【问题描述】:

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

【问题讨论】:

  • 您想查看getEvents 的实现如果我是正确的,EventDao 将生成类EventDao_impl,每个实现都在其中完成。你可以看看那个实现。
  • 仍然不确定您的意思。告诉我你会如何调用 getEvents ?并告诉我你将如何监听变化(因为我返回了一个 livedata)
  • 您是在使用ViewModel 还是想直接从活动中调用它?

标签: android android-room android-livedata


【解决方案1】:

如果您直接从活动调用,那么您的活动必须扩展 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。在未来的版本中,它将成为支持库的一部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多