在视图模型中使用 LiveData 的结果从 firebase 获取数据

Posted

技术标签:

【中文标题】在视图模型中使用 LiveData 的结果从 firebase 获取数据【英文标题】:Get data from firebase with Result of LiveData in viewmodel 【发布时间】:2018-12-30 07:26:59 【问题描述】:

我想从 firebase 获取 2 个对象,并且我想使用 viewmodel 在 Recyclerview 上显示组合结果。我创建了一个视图模型,它从 firebase 获取一个对象,并基于该对象的 id 我想获取另一个对象并更新 ui。 一些视图模型类的代码

  private static final DatabaseReference POST_REF =
        FirebaseDatabase.getInstance().getReference("/Post");

private final FirebaseQueryLiveData liveData = new 
FirebaseQueryLiveData(POST_REF);
 @NonNull
public LiveData<DataSnapshot> getDataSnapshotLiveData() 

    return liveData;


FirebaseQueryLiveData 类

private final MyValueEventListener listener = new MyValueEventListener();


public FirebaseQueryLiveData(DatabaseReference ref) 
    this.query = ref;


@Override
protected void onActive() 
    Log.d(LOG_TAG, "onActive");
    query.addValueEventListener(listener);


@Override
protected void onInactive() 
    Log.d(LOG_TAG, "onInactive");
    query.removeEventListener(listener);

如何使用 first 的结果从 firebase 获取第二个对象并通知 livedata

第一个对象是用户的帖子,第二个对象是 userinfo 。我想在 Ui 上显示组合结果。

我想获取帖子的数据库结构并基于帖子中的 id 我想获取用户详细信息

【问题讨论】:

添加完整代码、数据库结构和模型类@RohanSharma @Raj 我已经编辑了问题 你后来解决了吗?? 【参考方案1】:

我认为this tutorial 中的第 5 步是您问题的答案。 一旦 Firebase 中的数据发生更改,您就可以在此处更新 UI。

【讨论】:

我不认为他们没有使用 livedata 或 viemodels 要使用视图模型和实时数据更新 UI,您必须使用 android 的房间持久库。 codelabs.developers.google.com/codelabs/… 我想从帖子和用户模型中获取结果,并用它更新 livedata 对象。这是我主要关心的怎么做?

以上是关于在视图模型中使用 LiveData 的结果从 firebase 获取数据的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 视图模型中的内部网络更改回调时 LiveData 未触发 - Kotlin

LiveData 没有观察具有共享视图模型的子视图页面片段

如何在MVVM架构中观察RecyclerView适配器中的LiveData?

如何在基础活动暂停时暂停rxjava Observable.interval

我的 LiveData 变量无法正常工作

MVVM框架中Kotlin Flow的实践