Я создаю нового пользователя с аутентификацией и устанавливаю ключ пользователя в базе данных как UID пользователя.
private fun writeNewUser(name: String, email: String?) {
val user = User(name, email)
mDatabase.child("Users").child(mAuth.currentUser!!.uid).setValue(user)
}
Это работает нормально и дает следующий результат:
Я сейчас пытаюсь войти в систему и прочитать информацию об этом пользователе.
Я пытаюсь установить UID в качестве ссылки на базу данных (после успешной регистрации in).
* Мой процесс входа в систему работает.
Я получаю сообщение об ошибке MainActivity, в котором я пытаюсь отобразить данные:
Ошибка : Ни одна из следующих функций не может быть вызвана с предоставленными аргументами:
Строка : ключ? .Let {getValue (mAuth.uid)}
Вот мой код MainActivity, в котором я пытаюсь читать и отображать данные.
class MainActivity : AppCompatActivity() {
private lateinit var mUser: User
private lateinit var mAuth : FirebaseAuth
private lateinit var mDatabase: DatabaseReference
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mAuth = FirebaseAuth.getInstance()
mDatabase = FirebaseDatabase.getInstance().reference
fun currentUserReference(): DatabaseReference =
mDatabase.child("users").child(mAuth.currentUser!!.uid)
currentUserReference().addListenerForSingleValueEvent(
ValueListenerAdapter{
mUser = it.asUser()!!
tv_main_name.setText(mUser.name)
tv_main_email.setText(mUser.email)
}
)
}
fun DataSnapshot.asUser(): User? =
//error on this line ↓
key?.let { getValue(mAuth.uid) }
}
Редактировать 1
Существующее значениеListenerAdapter.kt
class ValueListenerAdapter(val handler: (DataSnapshot) -> Unit): ValueEventListener {
private val TAG = "ValueListenerAdapter"
override fun onDataChange(data: DataSnapshot) {
handler(data)
}
override fun onCancelled(error: DatabaseError) {
Log.e("onCancelled", TAG, error.toException())
}
}
Редактировать 2
class MainActivity : AppCompatActivity() {
private lateinit var mUser: User
private lateinit var mAuth : FirebaseAuth
private lateinit var mDatabase: DatabaseReference
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mAuth = FirebaseAuth.getInstance()
mDatabase = FirebaseDatabase.getInstance().reference
mDatabase.child("Users").child(mAuth.currentUser!!.uid)
.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onCancelled(p0: DatabaseError) {
TODO("Not yet implemented")
}
override fun onDataChange(p0: DataSnapshot) {
//Declare mUser as chosen DB User
tv_main_name.setText(mUser.name)
tv_main_email.setText(mUser.email)
}
})
}
}
Edi т 3
override fun onDataChange(p0: DataSnapshot) {
if (p0.hasChildren()) {
//Declare mUser as chosen DB User
tv_main_name.setText(mUser.name)
tv_main_email.setText(mUser.email)
}
}