null 不能强制转换为非 null 类型 kotlin.String NullPointer 异常
Posted
技术标签:
【中文标题】null 不能强制转换为非 null 类型 kotlin.String NullPointer 异常【英文标题】:null cannot be cast to non-null type kotlin.String NullPointer Exception 【发布时间】:2022-01-13 04:00:47 【问题描述】:我在我的实体类中声明不可为空,但是当我访问这些变量时,我得到NullPointerException
。我面临以下类型的错误:
java.lang.NullPointerException: null cannot be cast to non-null type kotlin.String
at com.nilmani.chatdemochat.controller.ChatController.addUser(ChatController.kt:31) ~[main/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:564) ~[na:na]
at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:169) ~[spring-messaging-5.3.13.jar:5.3.13]
at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:119) ~[spring-messaging-5.3.13.jar:5.3.13]
at org.springframework.messaging.handler.invocation.AbstractMethodMessageHandler.handleMatch(AbstractMethodMessageHandler.java:569) ~[spring-messaging-5.3.13.jar:5.3.13]
at org.springframework.messaging.simp.annotation.support.SimpAnnotationMethodMessageHandler.handleMatch(SimpAnnotationMethodMessageHandler.java:511) ~[spring-messaging-5.3.13.jar:5.3.13]
at org.springframework.messaging.simp.annotation.support.SimpAnnotationMethodMessageHandler.handleMatch(SimpAnnotationMethodMessageHandler.java:94) ~[spring-messaging-5.3.13.jar:5.3.13]
at org.springframework.messaging.handler.invocation.AbstractMethodMessageHandler.handleMessageInternal(AbstractMethodMessageHandler.java:524) ~[spring-messaging-5.3.13.jar:5.3.13]
at org.springframework.messaging.handler.invocation.AbstractMethodMessageHandler.handleMessage(AbstractMethodMessageHandler.java:458) ~[spring-messaging-5.3.13.jar:5.3.13]
at org.springframework.messaging.support.ExecutorSubscribableChannel$SendTask.run(ExecutorSubscribableChannel.java:144) ~[spring-messaging-5.3.13.jar:5.3.13]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) ~[na:na]
at java.base/java.lang.Thread.run(Thread.java:832) ~[na:na]
ChatMessage.kt
package com.nilmani.chatdemochat.model
import com.nilmani.chatdemochat.enum.MessageType
data class ChatMessage (
var messageType: MessageType?=null,
val content:String="",
var sender:String="")
ChatController.kt
@MessageMapping("/chat/roomId/addUser")
fun addUser(@DestinationVariable roomId: String,@Payload chatMessage: ChatMessage,messageHeader:SimpMessageHeaderAccessor)
val currentRoomId: String = messageHeader.sessionAttributes?.put("roo_id",roomId) as String
if (currentRoomId != null)
val leaveMessage = ChatMessage()
leaveMessage.messageType = MessageType.LEAVE
leaveMessage.sender = chatMessage.sender
messageingTemplate.convertAndSend(format("/channel/%s",currentRoomId),leaveMessage)
messageHeader.sessionAttributes?.set("username", chatMessage.sender)
messageingTemplate.convertAndSend(format("/channel/%s",roomId),chatMessage)
我在这一行得到NullPointerException
:
val currentRoomId: String =
messageHeader.sessionAttributes?.put("roo_id",roomId) as String
当加入另一个用户聊天时,它会出现这种类型的错误,并且新进入的用户无法连接到聊天应用程序。
【问题讨论】:
【参考方案1】:messageHeader.sessionAttributes?.put("roo_id",roomId)
的结果是 null
,但您尝试将其强制转换为非空字符串。
所以要么messageHeader.sessionAttributes
为null
,要么put("roo_id",roomId)
的结果为空。
【讨论】:
messageHeader.sessionAttributes
是 null
或 roomId
是 null
。以上是关于null 不能强制转换为非 null 类型 kotlin.String NullPointer 异常的主要内容,如果未能解决你的问题,请参考以下文章
kotlin.TypeCastException: null 不能转换为非 null 类型 com.midsizemango.databasekotlin.Note
致命异常 java.lang.NullPointerException: null 不能转换为非 null 类型 kotlin.String
null 不能转换为非 null 类型 android.support.v4.view.ViewPager - KOTLIN
Android Kotlin:null 不能转换为非 null 类型 com.android.app.ui.category.CategoryAdapter.ViewHolder 想要在 recycl