Kotlin 和 Firebase 读写数据

Posted

技术标签:

【中文标题】Kotlin 和 Firebase 读写数据【英文标题】:Kotlin and Firebase read and write data 【发布时间】:2020-07-08 20:02:52 【问题描述】:

我已经学习了 3 周的 Kotlin,所以我想从我的 Firebase 数据库中读取数据。

这是写入数据的 MainActivity.kt。

val database = Firebase.database
val latitude = latitude.text.toString().toDouble()
    val reflatitude = database.getReference("/user/time/$currenttime/latitude")

    //saved location to the Firebase Database
    reflatitude.setValue(latitude)
        .addOnSuccessListener 
            Log.d("MainActivity", "Saved the diary latitude to Firebase Database")
        

它运行良好,但是当我想从另一个活动(如 MapActivity)中调用它时。它仍然存在一些问题。

val database = Firebase.database
val reflatitude = database.getReference("/user/time/$currenttime/latitude")
reflatitude.addValueEventListener(object :ValueEventListener)
        override fun onDataChange(dataSnapshot: DataSnapshot)
            val latitude= dataSnapshot.getValue<Double>()
        
        override fun onCancelled(error: DatabaseError) 
            // Failed to read value
            Log.w(TAG, "Failed to read value.", error.toException())
        
    

我的 Ref 无法读取数据。

我得到的错误:

期待一个类体

@NonNull public open fun addValueEventListener(@NonNull p0: ValueEventListener) 的参数过多:com.google.firebase.database.DatabaseReference 中定义的 ValueEventListener

修饰符“覆盖”不适用于“局部函数”

fun getValue(): Any? 不需要类型参数?

修饰符“覆盖”不适用于“局部函数”

无法访问“TAG”:它在“AppCompatActivity”中是不可见的(在超类型中是私有的)

【问题讨论】:

你的错误是什么? 期待一个类体 @NonNull public open fun addValueEventListener(@NonNull p0: ValueEventListener) 的参数太多:com.google.firebase.database.DatabaseReference 中定义的 ValueEventListener 修饰符 'override' 不适用于 'local function' fun getValue() 没有类型参数:Any? 【参考方案1】:

试试这个代码:

    val database = Firebase.database
    val reflatitude = database.getReference("/user/time/$currenttime/latitude")
    reflatitude .addValueEventListener(object : ValueEventListener  
    override fun onDataChange(dataSnapshot: DataSnapshot)
                val latitude= dataSnapshot.getValue<Double>()
            
            override fun onCancelled(error: DatabaseError) 
                // Failed to read value
                Log.w(TAG, "Failed to read value.", error.toException())
            
        

【讨论】:

好的,我还有一个错误是“无法访问 'TAG':它在 'AppCompatActivity' 中是不可见的(在超类型中是私有的)” 在类而不是函数@5f25d18ce535c81dee73be07fafce5 中定义你的标签 虽然这回答了问题,但代码块本身并不总是有用的答案。建议解释您所展示的解决方案的作用,以及该代码为何/如何回答问题。 是的,他有一个小问题,这个答案解决了@Alex Mamo @MohammadMoeinGolchin 那个“小问题”是什么?请编辑您的答案并提供该信息。

以上是关于Kotlin 和 Firebase 读写数据的主要内容,如果未能解决你的问题,请参考以下文章

Swift 2.3 pod 更新后使用未解析的标识符 Firebase 'FIR'

Kotlin 和 Firebase :根据点击的地图标记在底部工作表中显示不同的数据

如何根据 Kotlin 中的键值从 firebase 读取数据

Firebase @Exclude 与 kotlin 数据类

在 Firebase 实时数据库中保存数据 Android Studio Kotlin

Firebase 到 Kotlin 片段