У меня есть прослушиватель дочерних событий, который регистрирует при добавлении нового дочернего элемента:
override fun onChildAdded(p0: DataSnapshot, p1: String?) {
Log.d("TAG", p0.child("name").getValue(String::class.java) + "/" + p0.child("telephone").getValue(String::class.java))
}
В моем Logcat выдается следующее:
D/TAG: John/123456
D/TAG: Lisa/12345688
D/TAG: Jeremy/999
Сейчас я пытаюсь отобразить результаты в реальном времени в виде списка в моей основной деятельности:
I никогда не делал этого раньше. Я запустил процесс, но мог бы использовать некоторую помощь, чтобы заставить его работать.
Я получаю всевозможные ошибки, используя некоторый код, который я нашел в Интернете:
MainActivity.kt
class MainActivity : AppCompatActivity() {
private lateinit var mDatabase: DatabaseReference
private lateinit var mListView: ListView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mDatabase = FirebaseDatabase.getInstance().reference
mListView = findViewById(R.id.lv_show_users)
val UserList = mDatabase.child("Users")
val listItems = arrayOfNulls<String>(UserList.size)
for (i in 0 until UserList.size) {
val user = UserList[i]
listItems[i] = user.name
}
val adapter = ArrayAdapter(this, listItems)
mListView.adapter = adapter
val childEventListener = object : ChildEventListener {
override fun onCancelled(p0: DatabaseError) {
TODO("Not yet implemented")
}
override fun onChildMoved(p0: DataSnapshot, p1: String?) {
TODO("Not yet implemented")
}
override fun onChildChanged(p0: DataSnapshot, p1: String?) {
TODO("Not yet implemented")
}
override fun onChildAdded(p0: DataSnapshot, p1: String?) {
Log.d("TAG", p0.child("name").getValue(String::class.java) + "/" + p0.child("telephone").getValue(String::class.java))
}
override fun onChildRemoved(p0: DataSnapshot) {
TODO("Not yet implemented")
}
}
mDatabase.child("Users").addChildEventListener(childEventListener)
bt_add_user.setOnClickListener {
val name = et_user_name.text.toString().trim()
val telephone = et_user_telephone.text.toString().trim()
writeNewUser(name, telephone)
}
}
private fun writeNewUser(name: String, telephone: String) {
val user = Users(name, telephone)
mDatabase.child("Users").push().setValue(user)
}
}
activity_main. xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".ui.MainActivity">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/et_user_name"
android:hint="Name"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/et_user_telephone"
android:hint="Telephone"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/bt_add_user"
android:text="Add User"/>
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/lv_show_users"/>
</LinearLayout>