从firebase获取数据,但我有错误查看

发布于 2025-02-07 20:22:23 字数 3482 浏览 2 评论 0原文

有人可以帮助我吗? 我想从firebase获取数据,所有代码已经绿色,但是当我尝试转到我的物联网片段时,它被迫关闭和错误: java.lang.nullpointerexception:itemView.findViewById(r.id.tv_percent)不得null

这是我的IoT fragment


class IOTFragment : Fragment() {

    private var _binding: FragmentIotBinding? = null
    private val binding get() = _binding!!

    private lateinit var sensorRecyclerView: RecyclerView
    private lateinit var sensorList: ArrayList<Sensor>
    private lateinit var dbRef: DatabaseReference

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        _binding = FragmentIotBinding.inflate(inflater, container, false)
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        sensorRecyclerView = binding.sensorView
        sensorRecyclerView.layoutManager = LinearLayoutManager(requireActivity())
        sensorRecyclerView.setHasFixedSize(true)

        sensorList = arrayListOf()

        getSensorData()
    }

    private fun getSensorData(){
//        sensorRecyclerView.visibility = View.GONE

        dbRef = FirebaseDatabase.getInstance().getReference("Sensor")

        dbRef.addValueEventListener(object :ValueEventListener{
            override fun onDataChange(snapshot: DataSnapshot) {
                sensorList.clear()
                if (snapshot.exists()){
                    for (sensorSnap in snapshot.children){
                        val sensorData = sensorSnap.getValue(Sensor::class.java)
                        sensorList.add(sensorData!!)
                    }
                    val mAdapter = SensorAdapter(sensorList)
                    sensorRecyclerView.adapter = mAdapter
//
//                    sensorRecyclerView.visibility = View.VISIBLE
                }
            }

            override fun onCancelled(error: DatabaseError) {
                TODO("Not yet implemented")
            }
        })
    }

    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }
}

我的传感器适配器

class SensorAdapter(private val sensorList: ArrayList<Sensor>) :
    RecyclerView.Adapter<SensorAdapter.ViewHolder>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val itemView =  LayoutInflater.from(parent.context).inflate(R.layout.fragment_iot, parent, false)
        return ViewHolder(itemView)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val currentSensor = sensorList[position]
        holder.tvValueSensor.text = currentSensor.data
        holder.tvNameSensor.text = currentSensor.name
    }

    override fun getItemCount(): Int {
        return sensorList.size
    }

    class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        val tvValueSensor : TextView = itemView.findViewById(R.id.tv_percent)
        val tvNameSensor : TextView = itemView.findViewById(R.id.tittle_parameter)
    }
}

我的数据类传感器

@Parcelize
data class Sensor(
    var data:String? = "",
    var name:String? = ""
):Parcelable

最后我的firebase 在此处输入映像

这就是我的代码

Does anyone can help me ?
I want to get data from firebase, all the code already green but when I try to move to my IOT fragment it forced close and the error:
java.lang.NullPointerException: itemView.findViewById(R.id.tv_percent) must not be null

Here's my IOT Fragment


class IOTFragment : Fragment() {

    private var _binding: FragmentIotBinding? = null
    private val binding get() = _binding!!

    private lateinit var sensorRecyclerView: RecyclerView
    private lateinit var sensorList: ArrayList<Sensor>
    private lateinit var dbRef: DatabaseReference

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        _binding = FragmentIotBinding.inflate(inflater, container, false)
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        sensorRecyclerView = binding.sensorView
        sensorRecyclerView.layoutManager = LinearLayoutManager(requireActivity())
        sensorRecyclerView.setHasFixedSize(true)

        sensorList = arrayListOf()

        getSensorData()
    }

    private fun getSensorData(){
//        sensorRecyclerView.visibility = View.GONE

        dbRef = FirebaseDatabase.getInstance().getReference("Sensor")

        dbRef.addValueEventListener(object :ValueEventListener{
            override fun onDataChange(snapshot: DataSnapshot) {
                sensorList.clear()
                if (snapshot.exists()){
                    for (sensorSnap in snapshot.children){
                        val sensorData = sensorSnap.getValue(Sensor::class.java)
                        sensorList.add(sensorData!!)
                    }
                    val mAdapter = SensorAdapter(sensorList)
                    sensorRecyclerView.adapter = mAdapter
//
//                    sensorRecyclerView.visibility = View.VISIBLE
                }
            }

            override fun onCancelled(error: DatabaseError) {
                TODO("Not yet implemented")
            }
        })
    }

    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }
}

My Sensor Adapter

class SensorAdapter(private val sensorList: ArrayList<Sensor>) :
    RecyclerView.Adapter<SensorAdapter.ViewHolder>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val itemView =  LayoutInflater.from(parent.context).inflate(R.layout.fragment_iot, parent, false)
        return ViewHolder(itemView)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val currentSensor = sensorList[position]
        holder.tvValueSensor.text = currentSensor.data
        holder.tvNameSensor.text = currentSensor.name
    }

    override fun getItemCount(): Int {
        return sensorList.size
    }

    class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        val tvValueSensor : TextView = itemView.findViewById(R.id.tv_percent)
        val tvNameSensor : TextView = itemView.findViewById(R.id.tittle_parameter)
    }
}

My data class sensor

@Parcelize
data class Sensor(
    var data:String? = "",
    var name:String? = ""
):Parcelable

Last My Firebase
enter image description here

That's all my code, hope someone can help me, thanks in advance yall

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

眼前雾蒙蒙 2025-02-14 20:22:23

从错误中,我认为您的布局fragment_iot不包含具有ID tv_percent的视图。如果是这样,您也应该添加布局代码。

From the error I think that your Layout fragment_iot does not contain a view with the ID tv_percent. If it does, you should add the Layout code as well.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文