【问题标题】:Kotlin - Best way to update Android Views using retrieved Firebase data [closed]Kotlin - 使用检索到的 Firebase 数据更新 Android 视图的最佳方法 [关闭]
【发布时间】:2020-03-04 09:11:07
【问题描述】:

我正在尝试使用我在 Firebase 实时数据库中获得的一些数据来更新我的 Android 视图。由于我使用的是 Kotlin,所以我在做这个简单的事情时遇到了一些问题。我不是实时数据库方面的专家,我刚刚发现对数据库的调用是异步进行的,这意味着我必须使用 onDataChange 函数中的数据。
我还发现 Kotlin 不允许我更改作为参数传递给某个函数的视图的值(例如我创建的使用从数据库检索的数据更新该视图的视图)。所以我指望你做这件事。

从 Firebase 检索数据并使用该数据更新我的视图的最佳方式是什么?我希望有一些干净的代码,比如做正确事情的不同函数,而我的 MainActivity 的 onCreate 方法中没有一堆代码。

【问题讨论】:

  • 你听说过设计模式吗?
  • 我知道它们是什么,但正如我所说,我不是专家,我真的不知道如何在实践中使用它们。这就是为什么我在这里要求获得一个示例,即使是最简单的示例,以调整我的代码并使其工作
  • 您可以使用官方模式文档中的示例。有大量文章包含使用异步数据获取的设计模式的示例。例如,如果我搜索“firebase firestore mvvm”,我会得到大量结果
  • 好的,我去看看,谢谢!但是 Kotlin + Firebase Realtime DB 模式的一个具体示例会帮助我更多
  • 检查 thisthis

标签: android firebase android-studio kotlin firebase-realtime-database


【解决方案1】:

也许是这样的:

fun fetchFeed(): LiveData<List<Feed>> {
  val result: MutableLiveData<List<Feed>> = MutableLiveData()
  firestore.collection("feeds")
    .addSnapshotListener { collectionSnapshot, exception ->
      if (exception != null) {
          //...handle error
          return@addSnapshotListener
      }
      if (collectionSnapshot == null || collectionSnapshot.isEmpty) {
          //...no data or no collection
        return@addSnapshotListener
      }
      val value: MutableList<Feed> = arrayListOf()
      collectionSnapshot.documents.map {
        value.add(it.toObject(Feed::class.java))
      }
      data.postValue(value)
    }
    return result
}


class FeedFragmentViewModel: ViewModel() {
  //ApiService is a singleton or an DAO eg... where your fetchFeed is declared or have access to it
  val result: LiveData<List<Feed>> = ApiService.fetchFeed()
}

class FeedFragment: Fragment() {

  override onActivityCreated() {
    //initialize view model -> in docs
    viewModel.result.observe(this, Observer {
      myListAdapter.updateList(it)
    })
  }
}

这不是一个完整的解决方案,但按照这些思路,我认为您应该能够将 realtimedb 纳入其中。长话短说,您想观察表示来自实时数据库的数据的实时数据。当那些改变你在观察者中的回调被调用时,你可以相应地更新 UI

【讨论】:

  • 完美,感谢您的耐心等待,这对我有很大帮助!
  • @Sosnos 如果您还有其他问题,请编辑您的答案并在评论中告诉我,我会尽力帮助您
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-07
  • 1970-01-01
  • 2020-03-18
  • 2017-03-29
  • 1970-01-01
  • 2013-06-08
相关资源
最近更新 更多