Ваша проблема в том, что в вашем getUserInfo
вы пытаетесь обновить некоторые текстовые файлы вашего activity
, используя следующее понятие
CustomerActivity().mNavigationHeaderText.text = map["name"].toString()
Проблема c Дело в том, что вы пытаетесь создать instance
вашего activity
с использованием CustomerActivity()
. Это неправильно, потому что в Android
Instance
из activities
создаются Android
SDK
.
Так как вы используете instance
вашего activity
?
Как вы, наверное, знаете, activities
имеет определенный Жизненный цикл , поэтому после создания instance
ваших activity
и initialization
, Android
звонки lifecycle functions
, такие как onCreate
и onRestart
, в этих функциях this
относится к instance
.
* 1042 вашей деятельности * Окончательное решение вашей проблемы - это LiveData , прочитайте это , чтобы узнать о LiveData
.
Ниже приведены два альтернативных решения, оба они будут работать, но если вы можете настроить свой проект для использования LiveData
, тогда избегайте следующего.
Чтобы решить вашу проблему, простая, но неправильная вещь будет , чтобы сделать следующее, здесь вы передаете instance
из activity
как parameter
в getUserInfo
CustomerDatabase().getUserInfo(this, mAuth.currentUser!!.uid)
Вторым подходом будет использование callback interface
. поэтому в своей деятельности определите интерфейс следующим образом:
interface Callback {
fun onFinished(map: Map <String, Any> )
}
Теперь измените ваш activity
для реализации этого interface
, поэтому в вашем activity
вы будете иметь следующую функцию
onFinished(map: Map <String, Any> ){
// use map to set your data
}
После этого измените ваш getUserInfo
, чтобы он принял параметр типа Callback, и этот обратный вызов будет вызываться getUserInfo при получении данных.
internal fun getUserInfo(uid: String, callback: Callback) {
mUserDatabase = FirebaseDatabase.getInstance().reference.child("Users").child("Customers").child(uid)
mCustomerDatabase.addValueEventListener(object: ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
if (dataSnapshot.exists() && dataSnapshot.childrenCount > 0) {
val map: (Map < String, Any > ) = dataSnapshot.value as(Map < String, Any > )
/** When data is available, pass it to activity by calling the callback */
callback.onFinished(map);
}
}
}