【问题标题】:Fatal exression error with my image background color我的图像背景颜色出现致命的表达错误
【发布时间】:2019-11-21 08:54:42
【问题描述】:

我正在学习一个旧的 Kotlin 课程,由于他们的课程已经很老了,我认为他们不再回复 Q&A。

我的问题是该应用程序运行良好,但是一旦我实现了一种背景颜色方法,它就会停止。

这是我得到的致命错误:

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,它就会崩溃,如果我删除该方法,它就会恢复正常工作。

【问题讨论】:

  • 什么字符串被传递给returnAvatarColor() 导致它崩溃? (即UserDataService.avatarColor是什么?)
  • @gidds 它只是一个空的var avatarColor = "",它将从显示背景颜色的 returnAvatarColor 中获取值
  • 堆栈跟踪显示您对Scanner.nextDouble() 的调用失败,因为它正在扫描的字符串此时没有有效的双精度。要了解原因,您需要知道它正在扫描的字符串 - 即 strippedColor 包含的内容。这取决于传递 returnAvatarColor() 的字符串(如components)。找到它,问题可能就会变得清晰。
  • 错误来自 `g = (scanner.nextDouble() * 255).toInt()` 或者至少这是它指向我的地方,但它的执行方式与 r 和b 所以我不明白为什么会出现错误...我还从课程中下载了源代码以检查我的代码是否有差异,但我没有错过任何内容>
  • 设法解决了这个问题,由于某种原因,val 扫描仪无法正常工作,所以我将其删除,现在终于可以正常工作了

标签: kotlin error-handling fatal-error


【解决方案1】:

我设法通过删除来解决这个问题

    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()
}

【讨论】:

  • 这可能会运行,但可能不会按照您的意愿执行:它将所有三个变量设置为 same 值(从字符串的开头获取)。要正确解决问题,您需要查看 strippedColor 实际上 具有什么值;然后你就能知道如何最好地解析它。
  • 它工作正常,我在这里设置了值return Color.rgb(r,g,b),它不会随机选择我需要的东西
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-23
  • 1970-01-01
相关资源
最近更新 更多