首页 > 解决方案 > 我的图像背景颜色出现致命的表达错误

问题描述

我正在学习旧的 Kotlin 课程,由于他们的课程已经很老了,我认为他们不再对问答做出回应。

我的问题是该应用程序完全可以正常工作,但是一旦我实现了一种背景颜色方法,它就会停止。

这是我得到的致命错误:

2019-11-21 11:46:14.035 31147-31147/com.example.smack E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.smack, PID: 31147
    java.util.InputMismatchException
        at java.util.Scanner.throwFor(Scanner.java:876)
        at java.util.Scanner.next(Scanner.java:1502)
        at java.util.Scanner.nextDouble(Scanner.java:2431)
        at com.example.smack.Services.UserDataService.returnAvatarColor(UserDataService.kt:35)
        at com.example.smack.Controller.MainActivity$userDataChangeReciever$1.onReceive(MainActivity.kt:72)
        at androidx.localbroadcastmanager.content.LocalBroadcastManager.executePendingBroadcasts(LocalBroadcastManager.java:313)
        at androidx.localbroadcastmanager.content.LocalBroadcastManager$1.handleMessage(LocalBroadcastManager.java:121)
        at android.os.Handler.dispatchMessage(Handler.java:102)
 at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6119)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

主要关注的是UserDataService.kt:35)我将颜色从双打转换为 Int 的位置:

fun returnAvatarColor(components: String) : Int {
    val strippedColor = components.replace("[", "").replace("]", "").replace(",", "")

    var r = 0
    var g = 0
    var b = 0

    val scanner = Scanner(strippedColor)
    if (scanner.hasNext()) {
        r = (scanner.nextDouble() * 255).toInt()
        g = (scanner.nextDouble() * 255).toInt()
        b = (scanner.nextDouble() * 255).toInt()
    }
    return Color.rgb(r,g,b)
}

在那之后,(MainActivity.kt:72)这是我获取方法以显示它的地方:

userImageNavHeader.setBackgroundColor(UserDataService.returnAvatarColor(UserDataService.avatarColor))

每当我运行该应用程序时,它都可以工作,但是一旦我尝试创建头像并获取它background color,它就会崩溃,如果我删除该方法,它就会恢复正常工作。

标签: kotlinerror-handlingfatal-error

解决方案


我设法通过删除

    val scanner = Scanner(strippedColor)

方法并像这样显示它:

if (Scanner(strippedColor).hasNext()) {
    r = (Scanner(strippedColor).nextDouble() * 255).toInt()
    g = (Scanner(strippedColor).nextDouble() * 255).toInt()
    b = (Scanner(strippedColor).nextDouble() * 255).toInt()
}

推荐阅读