使用Kotlin从Android App向Firebase写入数据时出现“无效密钥”

时间:2018-02-18 22:03:50

标签: android firebase firebase-realtime-database kotlin

我正在尝试使用此代码从我的Android应用程序向Firebase写入数据。 package com.example.envir.databasetesting

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import com.google.firebase.database.FirebaseDatabase
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val mdatabase = FirebaseDatabase.getInstance().reference
        val name = name_txt.text.toString().trim()
        val email = email_txt.text.toString().trim()


        var myMap = hashMapOf<String, String>()


        save_bu.setOnClickListener{

            myMap.put(name,email)

            mdatabase.push().setValue(myMap)




        }




    }

}

我不断收到此错误消息:

E / AndroidRuntime:致命异常:主要                   处理:com.example.envir.databasetesting,PID:28042                   com.google.firebase.database.DatabaseException:无效的密钥:。密钥不得包含'/','。','#','$','['或']'

我需要添加一个键还是一些东西?我认为默认会为我添加一个键?

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

...解决

必须将val移动到按钮侦听器...

save_bu.setOnClickListener{
            val name = name_txt.text.toString().trim()
            val email = email_txt.text.toString().trim()
            myMap.put("name", name)
            myMap.put("email",email)

            mdatabase.push().setValue(myMap)

答案 1 :(得分:0)

错误可能是指name val的内容。检查其内容并确保其中不包含任何禁止值。

通常,使用数据库键时,不要使用用户可能输入的任意值。仅使用您已确定为某个位置存储的数据构成架构的值。所以,如果你的地图看起来像这样,你会做得更好:

myMap.put("name", name)
myMap.put("email", email)

答案 2 :(得分:0)

当我这样做时,我发现错误已修复......

我改变了这段代码...... save_bu.setOnClickListener {

        myMap.put(name,email)

        mdatabase.push().setValue(myMap)

到此......

save_bu.setOnClickListener {

        myMap.put("name", name)
        myMap.put("email",email)

        mdatabase.push().setValue(myMap)

现在我的问题是它没有保存我在这些编辑文本字段中实际输入的数据。洛尔