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

我搜索了很长时间,我只能找到一个解决方案使用addListenerForSingle事件触发onDataChanged。 它只在数据库发生变化时触发。

我怎样才能得到一个页面加载的单个值(我的意思是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))) } } }) }) 

它返回Single<T> ,但是,如果你不使用RxJava ,只要删除相关的Single.create包装并返回T

exceptionDetails()

 private fun exceptionDetails(reference: String, children: Array<out String>): String = "Exception occurred on reference: $reference and children: ${children.forEach { String.format("-> %s", it) }}" 

和使用示例(如果此函数在某个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的官方文档。 请检查listen for value events部分。

希望它有帮助。