首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从Firebase获取数据,但我得到了错误View.findViewById(R.id.tv_percent)不能为null

从Firebase获取数据,但我得到了错误View.findViewById(R.id.tv_percent)不能为null
EN

Stack Overflow用户
提问于 2022-06-14 20:55:09
回答 1查看 26关注 0票数 0

有人能帮我吗?我想从firebase获得数据,所有的代码都是绿色的,但是当我试图移动到IOT片段时,它被迫关闭,错误是:java.lang.NullPointerException: itemView.findViewById(R.id.tv_percent) must not be null

这是我的IOT片段

代码语言:javascript
运行
复制
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
    }
}

我的传感器适配器

代码语言:javascript
运行
复制
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)
    }
}

我的数据类传感器

代码语言:javascript
运行
复制
@Parcelize
data class Sensor(
    var data:String? = "",
    var name:String? = ""
):Parcelable

最后一次我的Firebase 在这里输入图像描述

这就是我的全部代码,希望有人能帮我,谢谢你

EN

回答 1

Stack Overflow用户

发布于 2022-06-14 20:59:54

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72623259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档