【问题标题】:Reading data from firebase database into class doesn't work将 firebase 数据库中的数据读入类不起作用
【发布时间】:2020-09-26 15:22:14
【问题描述】:

我正在尝试从我的 firebase 实时数据库中读取所有用户并将它们存储在数据库类中,从数据库中读取用户按预期工作,但是当我尝试从类外部访问用户时,它返回一个空列表. 这是我的数据库类

class Database {

private val database = FirebaseDatabase.getInstance();
var users = mutableListOf<User>()

init {
    val valueEventListener = object : ValueEventListener {
        override fun onDataChange(data: DataSnapshot) {
            if (data.exists()){
                for (child in data.children) {
                    val user = child.getValue(User::class.java)
                    users.add(user!!)
                }
            }
        }

        override fun onCancelled(data: DatabaseError) {
            println("Error occurred while reading users data")
        }
    }
    database.getReference("Users").addValueEventListener(valueEventListener)
}


fun writePerson(user:User) {
    val users = database.getReference("Users")
    users.child(user.firstname).setValue(user)
}

这是我尝试从我的数据库类访问用户的地方

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val database = Database()

    val rafael = User("Rafael","Backx");
    rafael.addPhoneNumber("0123456789")
    database.writePerson(rafael)
    val rafael2 = User("Rafael2","Backx");
    rafael2.addPhoneNumber("012345678910")
    database.writePerson(rafael2)

    val users = database.users;
    println(users.size)
    for (child in users){
        println(child)
    }
}

这是我第一次使用 kotlin、android studio 和 firebase。

提前致谢

【问题讨论】:

  • Firebase API 是异步的。所以请查看this

标签: android firebase kotlin firebase-realtime-database


【解决方案1】:

Firebase 查询是异步的,不会在您调用 addValueEventListener 后立即完成。您的代码假设 Database 类立即被填充,但事实并非如此。您可以添加一些日志记录,以亲自查看代码实际执行的顺序。

使用 Firebase 并不是特别好的设计,因为您现在处于类的构造函数中。如果您对按照 Google 目前推荐的方式做事感兴趣,您可能需要研究 MVVM 架构。虽然工作量很大,但它是在 Android 应用中处理异步编程的正确方法。

【讨论】:

    猜你喜欢
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 2020-08-18
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多