java.lang.NumberFormatException: 对于输入字符串: "something"



我尝试将字符串拆分为两个变量,一个是string,一个是Long。它的工作,当我记录它,我可以看到它,我可以把它插入到房间数据库,但我不知道为什么"有时">我得到这个错误。像这样的字符串

m8fw5sMdAcaX4Ezv7vzImeRAjkq2_1635234951781
java.lang.NumberFormatException: For input string: "m8fw5sMdAcaX4Ezv7vzImeRAjkq2"
at java.lang.Long.parseLong(Long.java:594)
at java.lang.Long.parseLong(Long.java:636)
at com.animals.snowy.MainActivity$insertMessage$1$messageListener$1.onChildAdded(MainActivity.kt:88)

我的模型
@IgnoreExtraProperties
@Entity(tableName = "message_table")
data class MessageModel(
@NonNull
@PrimaryKey
var messageId: String = "",
var messageType: String? = null,
var messageTimestamp: Long? = null,
var messageData: String? = null,
var messageSenderId: String? = null,
var roomId: String = "",
var isSeen: Boolean = false,
var uploadSuccess : Boolean = false
) : Serializable {
}

这是我的代码,我想获得朋友的新消息,所以我从房间数据库中获得列表朋友,并使用for循环来获得roomId(我和我的朋友的子容器消息的名称)。

private fun insertMessage() {
viewModel.readRoomIdFriendsDAO().observe(this, { listRoomId ->
if (listRoomId != null && listRoomId.isNotEmpty()) {
for (item in listRoomId) {
val messageListener = object : ChildEventListener {
override fun onChildAdded(snapshot:DataSnapshot,previousChildName: String?) {
val messageModel: MessageModel? =
snapshot.getValue(MessageModel::class.java)
if (messageModel != null) {
messageModel.messageId = snapshot.key.toString().trim()
messageModel.roomId = item
messageModel.uploadSuccess = true
val listTemp = messageModel.messageId.split("_")
messageModel.messageSenderId = listTemp[0]
messageModel.messageTimestamp = listTemp[1].trim().toLong()
Log.e(TAG,"senderId: ${messageModel.messageSenderId}")
Log.e(TAG,"timestamp: ${messageModel.messageTimestamp}")
//                                messageViewModel.insertMessageDAO(messageModel)
}
}
override fun onChildChanged(
snapshot: DataSnapshot,
previousChildName: String?
) {
}
override fun onChildRemoved(snapshot: DataSnapshot) {
}
override fun onChildMoved(
snapshot: DataSnapshot,
previousChildName: String?
) {
TODO("Not yet implemented")
}
override fun onCancelled(error: DatabaseError) {
TODO("Not yet implemented")
}
}
messageRef
.child(item)
.addChildEventListener(messageListener)
}
}
})
}

java.lang.NumberFormatException在编译器试图将无效输入强制类型转换为number时抛出。

例如:

String validInputToCast = "123456789";
Long validInputToCast = validInputToCast.toLong(); // this casting will succeed.
String invalidInputToCast = "abce124";
Long invalidCastedInput = inputToCast.toLong(); // compiler will throw number exception on this line.

试着调试下面这行,希望你能找到错误。

messageModel.messageTimestamp = listTemp[1].trim().toLong()

最新更新