我在这里很新,我对我的小项目有疑问。
我为此活动设置了数据库引用(mDatabase),它指向子名称,并附加了addValueEventListener()以从Firebase数据库控制台监听datasnapshot以从数据库中获取名称值,但是当我运行到app时,它显示如下-
谢谢大家
注册活动
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()
}
})
}
}
答案 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...
}
});