【发布时间】:2018-03-14 11:18:36
【问题描述】:
我最近在编写程序时遇到了一个异常,仅仅因为编译器给了我一个错误的异常,我花了很多时间进行调试。
这是我的活动代码:
private var mCheatMap = HashMap<Int, Boolean>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_quiz)
mCheatMap = savedInstanceState?.getSerializable(KEY_CHEATER) as HashMap<Int, Boolean> ?: HashMap<Int, Boolean>()
}
在运行期间,我的应用程序崩溃了,当我查看日志时,它说 ActivityNotFound 异常,并且在建议中,它说也许我没有在我的 AndroidManifest.xml 中声明该活动
突然间,我偶然将mCheapMap 变量转换为安全转换,一切似乎都没有错误,一切都开始完美运行。例如:
private var mCheatMap = HashMap<Int, Boolean>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_quiz)
mCheatMap = savedInstanceState?.getSerializable(KEY_CHEATER) as? HashMap<Int, Boolean> ?: HashMap<Int, Boolean>()
}
现在我有一些困惑:
为什么当我遇到强制转换问题时编译器给了我
ActivityNotFound异常?为什么使用安全转换运算符解决了问题,因为即使没有安全转换运算符,我的转换也是正确的?
【问题讨论】:
-
@user2340612 这就是问题所在,我只得到的异常是 ActivityNotFound 异常,这真的没有意义。附言感谢您解决我的第二个问题。
-
也许
ActivityNotFound可能是因为ClassCastException被抛出在Activity 的onCreate中,因此创建没有成功并且运行时找不到Activity。但这只是我的猜测,我可能错了 -
这看起来更像是一个空指针异常而不是类转换异常......我可能错了。
-
OP 说使用安全强制转换解决了这个问题,NPE 不应该是这种情况。此外,使用安全调用运算符 (
?.) 和 elvis 运算符,null值可以“安全”处理(除非 NPE 发生在其他地方)
标签: android kotlin activitynotfoundexception