在android中加载的页面上加载firebase数据

在android中加载的页面上加载firebase数据,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我搜索了很长时间,我只能找到使用addListenerForSingle事件的解决方案,该事件在DataChanged上触发。它仅在数据库发生更改时触发 如何在加载页面时获得单个值(我是说onCreate) 例如,获取密钥非常简单 mReference.child("kotran").child("isactive").getKey() //isactive 但是无法获取值。addListenerForSingleValueEvent将在您第一次注册此类侦听器时被调用一次。 看看这个通用Kot

我搜索了很长时间,我只能找到使用addListenerForSingle事件的解决方案,该事件在DataChanged上触发。它仅在数据库发生更改时触发

如何在加载页面时获得单个值(我是说onCreate)

例如,获取密钥非常简单

mReference.child("kotran").child("isactive").getKey()
//isactive

但是无法获取值。

addListenerForSingleValueEvent
将在您第一次注册此类侦听器时被调用一次。 看看这个通用Kotlin示例,了解整个函数:

override fun <T : Any> getValue(typeClass: KClass<T>, reference: String, vararg children: String): Single<T> =
        Single.create({
            val databaseReference = firebaseDatabase.getReference(reference)

            databaseReference.addListenerForSingleValueEvent(object : ValueEventListener {
                override fun onCancelled(dbError: DatabaseError?) {
                    it.onError(FirebaseDatabaseException(
                            dbError?.message ?: context stringOf R.string.database_error,
                            dbError?.details ?: exceptionDetails(reference, children))
                    )
                }

                override fun onDataChange(dataSnapshot: DataSnapshot?) {
                    val value = childDataSnapshot(dataSnapshot, children)?.getValue(typeClass.java)
                    if (value != null) {
                        it.onSuccess(value)
                    } else {
                        it.onError(RetreivedValueNullException(exceptionDetails(reference, children)))
                    }
                }
            })
        })
和使用示例(如果此函数位于某些
FirebaseRepository
中):

firebaseRepository.getValue(Boolean::class, "kotran", "isActive")
    .subscribeOn(Schedulers.io)
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe({ /* do something with the value */}, 
               { /* do something with the error */})
有关这方面的更多详细信息。

Firebase中没有直接作用于引用的
getValue()
方法,如getKey()。要获取值,需要使用侦听器。
onDataChange()
方法立即返回当前值。是Firebase的官方文档。请检查
侦听值事件部分


希望有帮助。

要从Firebase获取值,请附加一个侦听器。请看,我知道我可以从侦听器获取值,但它只有类似onDataChange的方法…加载页面时,不会调用onDataChange。我希望在调用oncreate时获取值。
onDataChange
立即使用当前值触发。从文档:“此方法在连接侦听器时触发一次,每次数据(包括子项)更改时都会触发一次。”侦听器会立即触发(请尝试)。如果在执行此操作时遇到问题,请共享.@Pd.Jung您有解决方案吗?
firebaseRepository.getValue(Boolean::class, "kotran", "isActive")
    .subscribeOn(Schedulers.io)
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe({ /* do something with the value */}, 
               { /* do something with the error */})