# #firebase #kotlin
Вопрос:
Я не могу заполнить класс даты из базы данных. Я не понимаю, почему это не работает, кажется, все написано правильно. В функции initUser заполняется дата класса модели пользователя, но если вы запишете пользовательскую переменную в println, она будет пустой. Ниже приведен код класса MainActivity, который имеет функцию initUser
class MainActivity : AppCompatActivity() {
private lateinit var btn_settings: ImageButton
private lateinit var btn_add_friend: ImageButton
private lateinit var btn_search_main: ImageView
private lateinit var search_main: EditText
private lateinit var nickname_main: TextView
private lateinit var Id_main: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
initFirebase()
initUser()
init()
initFunc()
btn_settings.setOnClickListener {
val intent = Intent(this, SettingsActivity::class.java)
startActivity(intent)
}
btn_search_main.setOnClickListener {
if (search_main.text.toString() == "Happy") {
val intent = Intent(this, psh::class.java)
startActivity(intent)
}
}
nickname_main.text = USER.username
Id_main.text = CURRENT_UID
println(USER)
}
private fun initFunc() {
if (AUTH.currentUser != null) {
} else {
val intent = Intent(this, LoginActivity::class.java)
startActivity(intent)
}
}
private fun init(){
btn_settings = findViewById(R.id.btn_settings)
btn_add_friend = findViewById(R.id.btn_add_friend)
btn_search_main = findViewById(R.id.btn_search_main)
search_main = findViewById(R.id.search_main)
nickname_main = findViewById(R.id.nickname_main)
Id_main = findViewById(R.id.Id_main)
}
private fun initUser(){
REF_DATABASE_ROOT.child(NODE_USERS).child(CURRENT_UID)
.addListenerForSingleValueEvent(AppValueEventListener{
USER = it.getValue(UserModel()::class.java) ?:UserModel()
})
}
fun initFirebase(){
AUTH = FirebaseAuth.getInstance()
REF_DATABASE_ROOT = FirebaseDatabase.getInstance("https://ert-d167-default-rtdb.europe-west1.firebasedatabase.app").reference
USER = UserModel()
CURRENT_UID = AUTH.currentUser?.uid.toString()
}
}
class AppValueEventListener (val onSuccess:(DataSnapshot)->Unit) : ValueEventListener{
override fun onCancelled(error: DatabaseError) {
}
override fun onDataChange(snapshot: DataSnapshot) {
onSuccess(snapshot)
}
}
data class UserModel(
var id: String = "",
var username: String = ""
)
Если вы введете пользовательскую переменную в печать, это будет Модель пользователя(id=, имя пользователя=)
Данные в базе данных являются
Комментарии:
1. «Если вы введете пользовательскую переменную в печать, это будет Модель пользователя(id=, имя пользователя=)» Можете ли вы отредактировать свой вопрос (прямо под ним есть ссылка), чтобы показать, как вы это делаете? Пожалуйста, не добавляйте больше отдельных фрагментов, так как трудно понять, как они связаны (и у меня такое чувство, что это может иметь отношение к вашей проблеме). Попробуйте показать код в одном фрагменте, который мы можем скопировать/вставить, чтобы получить ту же проблему, что и у вас.
2. Кроме того, этот последний фрагмент выглядит так , как будто у вас есть ошибка копирования/вставки с
C
иURRENT_UID
, поэтому вы, возможно, захотите исправить и это.3. Я сделал все в одном коде
4. Спасибо. Я не вижу никакого кода, регистрирующего пользователя, который соответствовал бы вашему «Если вы введете пользовательскую переменную в печать, это будет модель пользователя(id=, имя пользователя=)», хотя. Можете ли вы показать нам, как вы получили этот результат?
5. Не говорите нам, что у вас там есть код, но отредактируйте свой вопрос, чтобы показать точный код и его вывод, пожалуйста. Как было сказано ранее, имеет значение, где находится этот код, а код — это наиболее вероятный способ, с помощью которого мы, скорее всего, увидим, что происходит не так.