我的图像背景颜色出现致命错误
Fatal exression error with my image background color
我正在学习一个旧的 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.onReceive(MainActivity.kt:72)
at androidx.localbroadcastmanager.content.LocalBroadcastManager.executePendingBroadcasts(LocalBroadcastManager.java:313)
at androidx.localbroadcastmanager.content.LocalBroadcastManager.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)
,这是我将颜色从 double 转换为 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
它就会崩溃,如果我删除该方法,它会恢复正常运行很好。
我设法通过删除
解决了这个问题
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()
}
我正在学习一个旧的 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.onReceive(MainActivity.kt:72)
at androidx.localbroadcastmanager.content.LocalBroadcastManager.executePendingBroadcasts(LocalBroadcastManager.java:313)
at androidx.localbroadcastmanager.content.LocalBroadcastManager.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)
,这是我将颜色从 double 转换为 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
它就会崩溃,如果我删除该方法,它会恢复正常运行很好。
我设法通过删除
解决了这个问题 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()
}