【发布时间】:2021-11-21 03:47:18
【问题描述】:
我需要从 Firebase 实时数据库获取详细信息到片段中的 RecyclerView。我参考了许多教程,最后对此进行了编码。我收到了这个错误:
这是我的片段代码。
class busFragment : Fragment() {
private lateinit var dbref: DatabaseReference
private lateinit var routeRecyclerView: RecyclerView
private lateinit var routesArrayList: ArrayList<BusRoutes>
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_bus, container, false)
}
@RequiresApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
routeRecyclerView = view.findViewById(R.id.bus_routes)
routeRecyclerView.layoutManager = LinearLayoutManager(activity)
routeRecyclerView.setHasFixedSize(true)
routesArrayList = arrayListOf<BusRoutes>()
getRouteDetails()
}
private fun getRouteDetails() {
dbref = FirebaseDatabase.getInstance().getReference("BusRoutes")
dbref.addValueEventListener(object : ValueEventListener{
override fun onDataChange(snapshot: DataSnapshot) {
if (snapshot.exists()){
for (routeSnapshot in snapshot.children){
val route = routeSnapshot.getValue(BusRoutes::class.java)
routesArrayList.add(route!!)
}
routeRecyclerView.adapter = Adapter(routesArrayList)
}
}
override fun onCancelled(error: DatabaseError) {
TODO("Not yet implemented")
}
})
}
companion object {
}
}
这是我的适配器.kt
class Adapter(private val routeslist: ArrayList<BusRoutes>) : RecyclerView.Adapter<Adapter.MyViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val itemView = LayoutInflater.from(parent.context).inflate(R.layout.items_busroutes,
parent,false)
return MyViewHolder(itemView as ViewGroup)
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
val currentItem = routeslist[position]
holder.route.text = currentItem.routeNo
holder.start.text = currentItem.start
holder.end.text = currentItem.end
}
override fun getItemCount(): Int {
return routeslist.size
}
class MyViewHolder(itemView:ViewGroup) : RecyclerView.ViewHolder(itemView){
val route : TextView = itemView.findViewById(R.id.routeNo)
val start : TextView = itemView.findViewById(R.id.startPlace)
val end : TextView = itemView.findViewById(R.id.endPlace)
}
}
这是第 52 行 val route = routeSnapshot.getValue(BusRoutes::class.java)
我多次尝试修复此问题,但仍然找不到。帮我。我还在学习 Kotlin。
BusRoutes 类:
data class BusRoutes(val routeNo: String? = null, val start: String? = null, val end: String? = null)
【问题讨论】:
-
不清楚你是如何在你的firebase中保存
routeNo的,如果它是一个没有引号的Long数字,就像错误所说的那样,那么你需要确保它们被保存为@ 987654335@否则;更改您的数据类并使routeNoLong -
请显示你的
BusRoutes类的内容和你的数据库的清晰图像。请回复@AlexMamo -
@AlexMamo 更新
-
@Jagar 我认为这是错误,但为什么它说没有连接适配器
标签: android firebase kotlin firebase-realtime-database google-cloud-platform