Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从数据快照中获取价值的更好方法?_Android_Kotlin_Firebase Realtime Database_Operator Overloading_Inline - Fatal编程技术网

Android 从数据快照中获取价值的更好方法?

Android 从数据快照中获取价值的更好方法?,android,kotlin,firebase-realtime-database,operator-overloading,inline,Android,Kotlin,Firebase Realtime Database,Operator Overloading,Inline,在Android Studio中,使用Firebase实时数据库和Kotlin检索节点的值,您将获得以下代码: val parentNodePath: String = "nodeParentPath" val nodePath: String = "nodePath" val nodeRef = FirebaseDatabase.getInstance().reference.child(parentNodePath) var value: Int nodeRef.addListener

在Android Studio中,使用Firebase实时数据库和Kotlin检索节点的值,您将获得以下代码:

val parentNodePath: String = "nodeParentPath"
val nodePath: String = "nodePath"

val nodeRef = FirebaseDatabase.getInstance().reference.child(parentNodePath)

var value: Int

nodeRef.addListenerForSingleValueEvent(object : ValueEventListener{
override fun onDataChange(dS: DataSnapshot) {
    value = dS.child(nodePath).getValue(Int::Class.java)!!
    //or also 
    //value = dS.child(nodePath).value as Int
}

override fun onCancelled(dE: DatabaseError) {}
})
是否可以定义一个扩展函数来实现
get
操作符重载来检索路径中的值,并且最好也使用
inline
关键字,这样当它运行时,就不必调用函数,而是在代码中内联

/*inline*/ operator fun DataSnapshot.get(path: String): Any? =
    this.child(path).value

它将被用作Int的
value=dS[nodePath]

你所说的“OK”是什么意思?这是你想要的方式吗?您是否预期会有异议?如果是,是什么?我的意思是,会有任何性能问题吗?我实现了它,它工作得很好,我不知道它是否会在更大范围内引起任何问题如果你想知道是否有性能问题,你应该对它进行基准测试。但老实说,我认为在你真正观察到性能问题之前,这一点根本不值得担心。你所说的“OK”是什么意思?这是你想要的方式吗?您是否预期会有异议?如果是,是什么?我的意思是,会有任何性能问题吗?我实现了它,它工作得很好,我不知道它是否会在更大范围内引起任何问题如果你想知道是否有性能问题,你应该对它进行基准测试。但老实说,我认为在您实际观察到性能问题之前,这一点根本不值得担心。