android - Android Kotlin Firebase 实时数据库:RecyclerView 显示为空
问题描述
我已经阅读了所有类似的问题,但是找不到解决方案。没有任何错误。
您能否查看这些代码并帮助找出这些代码不显示 Firebase 数据的问题。查询有问题吗?或 RecyclerView?或适配器?
class OurResults : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_allresults)
actionBar.setBackgroundDrawable(resources.getDrawable(R.drawable.actionbar))
BeginFirebaseAuthListener()
Beginsicknesslistener()
}
var mValueEventListener:ValueEventListener=object :ValueEventListener{
override fun onCancelled(p0: DatabaseError) {
TODO("not implemented")
}
override fun onDataChange(p0: DataSnapshot) {
BringSickness()
}
}
private fun BringSickness() {
if(allsickness==null){
allsickness=ArrayList<usersickness>()
}
mySicknessReferans=FirebaseDatabase.getInstance().getReference()
var userid=FirebaseAuth.getInstance().currentUser?.uid
var myQuery=mySicknessReferans?.child("sickness/users/$user_id"+"/")!!
.addListenerForSingleValueEvent(object :ValueEventListener{
override fun onCancelled(p0: DatabaseError) {
TODO("not implemented")
}
override fun onDataChange(p0: DataSnapshot) {
for(Onesickness in p0!!.children){
var tempsickness=usersickness()
tempsickness.photo_result=Onesickness.getValue(usersickness::class.java)!!.photo_result
tempsickness.date=Onesickness.getValue(usersickness::class.java)!!.date
allsickness?.add(tempsickness)
myAdapter?.notifyDataSetChanged()
}
}
})
if(myAdapter==null){
initsicknesslist()
}
}
private fun initsicknesslist() {
myAdapter= SicknessRecyclerViewAdapter(this,allsickness!!)
rv_sickness.adapter=myAdapter
rv_sickness.layoutManager=LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false)
rv_sickness.scrollToPosition(myAdapter?.itemCount!!-1)
}
private fun Beginsicknesslistener() {
mySicknessReferans=FirebaseDatabase.getInstance().getReference()
.child("sickness/users/"+FirebaseAuth.getInstance().currentUser?.uid)
mySicknessReferans?.addValueEventListener(mValueEventListener)
}
private fun BeginFirebaseAuthListener() {
mAuthListener=object:FirebaseAuth.AuthStateListener{
override fun onAuthStateChanged(p0: FirebaseAuth) {
var myUser=p0.currentUser
if(myUser==null){
var intent=Intent(this@allresults,LoginActivity::class.java)
startActivity(intent)
finish()
}
}
}
}
override fun onStart() {
super.onStart()
FirebaseAuth.getInstance().addAuthStateListener (mAuthListener!!)
}
override fun onStop() {
super.onStop()
if(mAuthListener!=null){
FirebaseAuth.getInstance().removeAuthStateListener (mAuthListener!!)
}
}
override fun onResume() {
super.onResume()
}
}
数据库结构是: --user - xGKiiLnf6TWhJeThkeKbZxtwHr1 -email: -photo: -userid: - gYJMhNRZ5XPMzAROsoNyQOmdVFd2 -email: -photo: -userid: --sickness - users -gYJMhNRZ5XPMzAROsoNyQOmdVFd2 -184b4d0f-93b64-413b64 -b -photo_id:
解决方案
在此处输入图像描述首先,您的ValueEventListener
内容是多余的。所以,不需要打电话Beginsicknesslistener
而是打电话BringSickness
onCreate
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
.....
BeginFirebaseAuthListener()
//Beginsicknesslistener()
BringSickness()
}
然后解析里面的疾病数据,BringSickness
如下所示:
private fun BringSickness() {
if(allsickness == null){
allsickness = ArrayList<usersickness>()
}
if(myAdapter == null){
initsicknesslist()
}
mySicknessReferans = FirebaseDatabase.getInstance().getReference()
var userid = FirebaseAuth.getInstance().currentUser?.uid
var myQuery = mySicknessReferans?.child("sickness/users/$user_id"+"/")!!
.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onCancelled(p0: DatabaseError) {
TODO("not implemented")
}
override fun onDataChange(p0: DataSnapshot) {
for(Onesickness in p0!!.children){
var tempsickness = Onesickness.getValue(usersickness::class.java)
if(tempsickness != null) {
allsickness?.add(tempsickness)
}
}
//Update adapter after collecting all the data
myAdapter?.notifyDataSetChanged()
}
})
}
建议:编码时应遵循标准命名约定。
推荐阅读
- python - 带有标准输入的 subprocess.run 不处理
- c++ - 安装哪个组件来获取 Windows Docker 容器中的 VC 文件夹?
- java - 如何在 Java 文件中运行 Kotlin 库(通过 JitPack 分发)?
- arrays - 连接不同大小的二维数组(谷歌表格)
- r - 您可以增加 R 格式表中列名/标题的大小吗
- json - 如何使用从 axios 发送的数据更新订单?
- amazon-web-services - 如何在 EC2 上创建警报,如果实例保持打开超过 6 小时就会触发?
- azure - Azure 数据工厂 - 将数据从 ADLS 复制到 Cosmos DB - 在创建 ADLS 作为源的连接时出错
- php - 在 Laravel 7x 中找不到 App\XyzModel 错误
- python - QuickSort Python 中值三分区