从firebase获取数据,但我有错误查看
有人可以帮助我吗? 我想从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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
从错误中,我认为您的布局
fragment_iot
不包含具有IDtv_percent
的视图。如果是这样,您也应该添加布局代码。From the error I think that your Layout
fragment_iot
does not contain a view with the IDtv_percent
. If it does, you should add the Layout code as well.