snapshot.value.toString () показывает ноль / Android Studio / Firebase - PullRequest
0 голосов
/ 30 декабря 2018

Я новичок здесь, и у меня есть вопрос о моем маленьком проекте.

Я установил ссылку на базу данных (mDatabase) для этого действия, указывающего на имя потомка, и прикрепил addValueEventListener () для прослушиванияснимок данных из консоли базы данных firebase для получения значения имени из базы данных, но когда я запускаю приложение, он выглядит следующим образом -
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 голосов
/ 30 декабря 2018

Нет атрибута value в объекте DataSnapshot ( см. Документацию ). Пожалуйста, обратитесь к документации по как читать значения .Вам следует использовать функцию getValue().

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

    @Override
    public void onCancelled(DatabaseError error) {
        // TODO...
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...