Создаю чат. Отображаю чаты в фрагменте:
private fun retrieveChatList()
{
mUsers = ArrayList()
val ref = FirebaseDatabase.getInstance().reference.child("Users")
ref!!.addValueEventListener(object : ValueEventListener {
override fun onDataChange(p0: DataSnapshot)
{
(mUsers as ArrayList).clear()
for (dataSnapshot in p0.children)
{
val user = dataSnapshot.getValue(User::class.java)
for (eachChatList in usersChatList!!)
{
if (user!!.getUID().equals(eachChatList.getId()))
{
(mUsers as ArrayList).add(user!!)
}
}
}
userAdapterSecond = UserAdapterSecond(context!!, (mUsers as ArrayList<User>), true)
recycler_view_messages.adapter = userAdapterSecond
}
override fun onCancelled(p0: DatabaseError) {
}
})
}
Код работает успешно, чаты отображаются. Но при некоторых действиях (например, регистрация или авторизация) приложение вылетает. В Logcat посмотрел, где ошибка. Не работает эта часть кода:
userAdapterSecond = UserAdapterSecond(context!!, (mUsers as ArrayList<User>), true)
Полный код фрагмента:
class MessagesFragment : Fragment() {
private var userAdapterSecond: UserAdapterSecond? = null
private var mUsers: List<User>? = null
private var usersChatList: List<ChatList>? = null
lateinit var recycler_view_messages: RecyclerView
private var firebaseUser: FirebaseUser? = null
private var param1: String? = null
private var param2: String? = null
override fun onCreate(savedInstanceState: Bundle?)
{
super.onCreate(savedInstanceState)
arguments?.let {
param1 = it.getString(ARG_PARAM1)
param2 = it.getString(ARG_PARAM2)
}
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view = inflater.inflate(R.layout.fragment_messages, container, false)
recycler_view_messages = view.findViewById(R.id.recycler_view_messages)
recycler_view_messages.setHasFixedSize(true)
recycler_view_messages.layoutManager = LinearLayoutManager(context)
firebaseUser = FirebaseAuth.getInstance().currentUser
usersChatList = ArrayList()
val ref = FirebaseDatabase.getInstance().reference.child("ChatList").child(firebaseUser!!.uid)
ref!!.addValueEventListener(object : ValueEventListener{
override fun onDataChange(p0: DataSnapshot)
{
(usersChatList as ArrayList).clear()
for (dataSnapshot in p0.children)
{
val chatList = dataSnapshot.getValue(ChatList::class.java)
(usersChatList as ArrayList).add(chatList!!)
}
retrieveChatList()
}
override fun onCancelled(p0: DatabaseError) {
}
})
return view
}
companion object {
fun newInstance(param1: String, param2: String) =
MessagesFragment().apply {
arguments = Bundle().apply {
putString(ARG_PARAM1, param1)
putString(ARG_PARAM2, param2)
}
}
}
private fun retrieveChatList()
{
mUsers = ArrayList()
val ref = FirebaseDatabase.getInstance().reference.child("Users")
ref!!.addValueEventListener(object : ValueEventListener {
override fun onDataChange(p0: DataSnapshot)
{
(mUsers as ArrayList).clear()
for (dataSnapshot in p0.children)
{
val user = dataSnapshot.getValue(User::class.java)
for (eachChatList in usersChatList!!)
{
if (user!!.getUID().equals(eachChatList.getId()))
{
(mUsers as ArrayList).add(user!!)
}
}
}
userAdapterSecond = UserAdapterSecond(context!!, (mUsers as ArrayList<User>), true)
recycler_view_messages.adapter = userAdapterSecond
}
override fun onCancelled(p0: DatabaseError) {
}
})
} }
В чём может быть проблема?
Лог ошибки:
2020-11-16 22:29:56.969 17231-17231/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.megapixel.trashbench, PID: 17231
kotlin.KotlinNullPointerException
at com.megapixel.trashbench.Fragments.MessagesFragment$retrieveChatList$1.onDataChange(MessagesFragment.kt:124)
at com.google.firebase.database.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:75)
at com.google.firebase.database.core.view.DataEvent.fire(DataEvent.java:63)
at com.google.firebase.database.core.view.EventRaiser$1.run(EventRaiser.java:55)
at android.os.Handler.handleCallback(Handler.java:888)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:8178)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101)
onDestroyViewнапример. – ЮрийСПб Nov 16 '20 at 19:36