【问题标题】:firebase listview shows blank pagefirebase listview 显示空白页
【发布时间】:2018-05-31 02:12:16
【问题描述】:

从 arraylist 中的 firebase 检索数据后,我的应用显示空白页。 下面是我的代码,运行时没有显示任何错误

class Main4Activity : AppCompatActivity() {
        private lateinit var data : ListView
       lateinit var arraylst:ArrayList<String>
    lateinit var ref :DatabaseReference

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main4)
        data =findViewById(R.id.abcd)
        arraylst = arrayListOf()
         val  ref = FirebaseDatabase.getInstance().getReference().child("User")
         val adptr = ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,arraylst)
        data.adapter = adptr
        ref.addChildEventListener(object :ChildEventListener{
            override fun onCancelled(p0: DatabaseError?) {}
            override fun onChildMoved(p0: DataSnapshot?, p1: String?) {}
            override fun onChildChanged(p0: DataSnapshot?, p1: String?) {}

            override fun onChildAdded(p0: DataSnapshot?, p1: String?) {

                if (p0!!.exists()) {
                    for (h in p0.children) {
                        adptr.clear()
                        val rdata = h.getValue(String::class.java)
                        arraylst.add(rdata!!)
                        adptr.notifyDataSetChanged()

                    }
                }
            }
              override fun onChildRemoved(p0: DataSnapshot?) {}

        })

应用程序未显示任何错误,但列表视图项为空白

【问题讨论】:

  • 通过忽略onCancelled,您可能会隐藏此代码不起作用的原因。 throw databaseError.toException() 是一种防止隐藏安全问题的简单方法。

标签: listview firebase arraylist firebase-realtime-database kotlin


【解决方案1】:

如果你想要一个子集合,你可以使用 ValuEventListener。

或者这样使用...

override fun onChildAdded(dataSnapShot: DataSnapshot?, p1: String?) {
    dataSnapShot?.getValue<Model>(Model::class.java)?.let { model -> 
        modelList.add(model) 
        adaptr.notifyItemInserted(modelList.size())
    }
}


override fun onChildRemoved(dataSnapShot: DataSnapshot?) {
    dataSnapShot?.getValue<Model>(Model::class.java)?.let { model -> 
        modelList.remove(model)
        adaptr.notifyItemRemoved(modelList.size())
    }
}

【讨论】:

    【解决方案2】:

    使用此代码从数据库中获取价值。

     val reference = database.getReference.child("user")
        reference.addValueEventListener(object : ValueEventListener {
            override fun onDataChange(dataSnapshot: DataSnapshot) {
              var s: String = dataSnapshot.value as String
                Log.e(TAG, "Data : value"+s)
            }
    
            override fun onCancelled(databaseError: DatabaseError) {
                Log.e(TAG, "onCancelled:kkkkkkk ")
            }
        })
    

    【讨论】:

      猜你喜欢
      • 2014-07-19
      • 2015-06-06
      • 2020-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多