snapshot.value.toString()显示为空/ Android Studio / Firebase

时间:2018-12-29 22:28:09

标签: android firebase firebase-realtime-database kotlin

我在这里很新,我对我的小项目有疑问。

我为此活动设置了数据库引用(mDatabase),它指向子名称,并附加了addValueEventListener()以从Firebase数据库控制台监听datasnapshot以从数据库中获取名称值,但是当我运行到app时,它显示如下-
error image

谢谢大家

注册活动

class RegisterScreenActivity : AppCompatActivity() {

val mAuth = FirebaseAuth.getInstance()
lateinit var mDatabase : DatabaseReference



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

    val regBtn = findViewById<View>(R.id.regBtn)as Button

    mDatabase = FirebaseDatabase.getInstance().getReference("Names")

    regBtn.setOnClickListener { view -> register()
    }

}

私人趣味寄存器(){

val emailTxt = findViewById<View>(R.id.emailTxt) as EditText
val nameTxt = findViewById<View>(R.id.nameTxt) as EditText
val passwordTxt = findViewById<View>(R.id.passwordTxt) as EditText

var email = emailTxt.text.toString()
var name = nameTxt.text.toString()
var password = passwordTxt.text.toString()

if (!name.isEmpty() && !password.isEmpty() && !email.isEmpty()){
    mAuth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(this) { task ->
        if (task.isSuccessful){
            val user = mAuth.currentUser
            val uid = user!!.uid
            mDatabase.child(uid).child("Name").setValue(name)
            Toast.makeText(this,"xxxxx",Toast.LENGTH_LONG).show()
            startActivity(Intent(this, LoginPage::class.java))

        }else{
            Toast.makeText(this,"xxxx",Toast.LENGTH_LONG).show()
        }
    }

}else{
    Toast.makeText(this,"xxxxx!",Toast.LENGTH_LONG).show()
}

}

我保留用户信息,然后进行登录活动

class LoginPage : AppCompatActivity() {
val mAuth = FirebaseAuth.getInstance()


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

    val loginBtn = findViewById<View>(R.id.loginBtn) as Button
    val regTxt = findViewById<View>(R.id.regTxt)as Button

    loginBtn.setOnClickListener { view -> login()
    }

    regTxt.setOnClickListener { view -> register()
    }


}

private fun login() {
    val emailTxt = findViewById<View>(R.id.emailTxt) as EditText
    val passwordTxt = findViewById<View>(R.id.passwordTxt) as EditText

    var email = emailTxt.text.toString()
    var password = passwordTxt.text.toString()

    if (!email.isEmpty() && !password.isEmpty()) {

        mAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(this) { task ->
            if (task.isSuccessful) {
                startActivity(Intent(this, Timeline::class.java))
                Toast.makeText(this, "xxxxx", Toast.LENGTH_LONG).show()
                startActivity(Intent(this,Timeline::class.java))
            } else {
                Toast.makeText(this, "xxxx",Toast.LENGTH_LONG).show()

            }

        }

    } else {
        Toast.makeText(this, "xxxxx", Toast.LENGTH_LONG).show()
    }

}

private fun register (){


    startActivity(Intent(this,RegisterScreenActivity::class.java))
}

}

,如果信息正确,则下一个活动时间表

class Timeline : AppCompatActivity() {

lateinit var mDatabase: DatabaseReference


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

    val dspTxt = findViewById<View>(R.id.dispTxt) as TextView

    mDatabase = FirebaseDatabase.getInstance().getReference("Names")

    mDatabase.addValueEventListener(object : ValueEventListener {
        override fun onCancelled(p0: DatabaseError) {
            TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
        }

        override fun onDataChange(snapshot: DataSnapshot) {
             snapshot.child("Name").toString()
            dspTxt.text ="Welcome " + snapshot.value.toString()
        }
    })

}

}

1 个答案:

答案 0 :(得分:3)

value对象(see documentation)上没有属性DataSnapshot 请参阅how to read values上的文档。您应该使用函数getValue()

myDatabase.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        String name = dataSnapshot.getValue(String.class);
    }

    @Override
    public void onCancelled(DatabaseError error) {
        // TODO...
    }
});