我正在制作一个聊天应用程序。 当我发送消息时,它将存储在Firebase实时数据库中,并将显示与我有消息的用户。
,但是在此过程中,发生KotlinNullPointerExcpetion。
您可以阅读以下代码。
首先,我发送消息时进行编码。 (MessageActivity.kt)
sendBtn.setOnClickListener(object : View.OnClickListener{
override fun onClick(v: View?) {
var msg = msgSendBox.text.toString()
if(!msg.equals("")) {
sendMessage(firebaseUser.uid, receiverId, msgSendBox.text.toString())
msgSendBox.setText("")
}
}
})
。
private fun sendMessage(sender : String, receiver : String, message : String){
var reference = FirebaseDatabase.getInstance().getReference()
var hashMap : HashMap<String, Object> = HashMap();
hashMap.put("sender", sender as Object)
hashMap.put("receiver", receiver as Object)
hashMap.put("message", message as Object)
reference.child("Chats").push().setValue(hashMap)
}
以及显示所有用户的代码。(UserListFragment.kt)
private fun readUsers(){
var firebaseUser = FirebaseAuth.getInstance().currentUser
var reference = FirebaseDatabase.getInstance().getReference("Users")
reference.addValueEventListener(object : ValueEventListener{
override fun onDataChange(dataSnapShot: DataSnapshot) {
for(snapShot in dataSnapShot.children){
var user = snapShot.getValue(User::class.java)
assert(user != null)
assert(firebaseUser != null)
if(!(user?.id.equals(firebaseUser?.uid))){
mUsers.add(user!!)
}
}
userAdapter = UserAdapter(context!!, mUsers)
recyclerView.adapter = userAdapter
}
override fun onCancelled(p0: DatabaseError) {
}
})
}
和显示我有消息的用户的代码(ChatListFragment.kt)
private fun readChat(){
mUsers = ArrayList()
reference = FirebaseDatabase.getInstance().getReference("Users")
reference.addValueEventListener(object : ValueEventListener{
override fun onDataChange(dataSnapShot: DataSnapshot) {
mUsers.clear()
for(snapShot in dataSnapShot.children){
var user = snapShot.getValue(User::class.java) as User
for(mId in usersList) {
assert(user != null)
if (user.id.equals(mId)) {
mUsers.add(user)
}
}
}
userAdapter = UserAdapter(context!!, mUsers)
recyclerView.adapter = userAdapter
}
override fun onCancelled(p0: DatabaseError) {
}
})
}
在此代码中,会发生如下错误。
Process: com.techtown.breadchatapp, PID: 7773
kotlin.KotlinNullPointerException
at com.techtown.breadchatapp.fragment.UserListFragment$readUsers$1.onDataChange(UserListFragment.kt:65)
at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@19.2.1:75)
at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@19.2.1:63)
at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@19.2.1:55)
at android.os.Handler.handleCallback(Handler.java:907)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:216)
at android.app.ActivityThread.main(ActivityThread.java:7506)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:956)
答案 0 :(得分:0)
查看错误中提到的代码:
at com.techtown.breadchatapp.fragment.UserListFragment$readUsers$1.onDataChange(UserListFragment.kt:65)
第65行...
答案 1 :(得分:0)
根据您的评论,如果它不是mUsers
,则将作为您的上下文。您正在使用!!
运算符,如果context
为null,它将抛出KotlinNullPointerExcpetion