我的项目里有一个展示附近WiFi的列表,点击条目的时候就会弹出对话框提示输入密码,结果每次弹出这个自定义对话框的时候就会崩溃,报错的是android.content.res.Resources$NotFoundException: Resource ID #0x7f0a0041,实际上就是资源文件找不到。我的自定义对话框用到dialog_inputpwd这样的一个布局文件。
我在腾讯bugly上看到崩溃日志的提示如下:
该异常表示找不到资源ID 。 [解决方案]:出现这个异常的原因有很多,具体原因可以参考Exception Message的内容,建议检查以下几点: 1.引用的资源ID 是否能匹配到R.java文件中定义的资源; 2.是否因为缓存等原因导致编译APK时未把资源文件打包进去,可以把APK反编译检查下; 3.是否使用了一个错误的类型来引用了某个资源或者配置资源时存在错误; 4.是否将Int等整型变量作为了参数传给了View.setText调用,这种情况下该整型变量将被认为是一个资源ID号去资源列表中查找对应的资源,导致找不到对应资源错误;解决方法是做类型转换View.setText(String.valueOf(Int id))。 5.xml里控件写了onclick方法名称,但是对应的activity类里没有对应的click事件方法
以后大家遇到这个bug,可以看看这上面五条有没有能对应上的。
后来我找到我产生这个bug的原因如下:
在Project视图下,大家可以看到我的layout布局文件有两个,一般情况下,当app运行在手机上时,就会自动加载layout下的布局文件,当app运行在平板这种大屏上时就会加载layout-sw600dp里面的文件。我的dialog_inputpwd这个布局文件是从其他项目中复制过来的,当时直接丢在了layout文件夹下就没太在意,结果没想到Android studio把我的这个dialog_inputpwd放在了layou_sw600dp这个文件夹下,并没有放在layout文件夹下,而且顺利的编译通过了,并没有在gradle的时候报错。当我把app运行在手机上时,app会到layout这个文件夹下找dialog_inputpwd这个布局文件,但是找不到,所以报了资源文件找不到的错。后来我把这个布局文件复制一份放在了layout文件夹下。再次运行。bug就没有了。
如果本文对你有帮助的话,麻烦在左侧点个赞,谢谢支持!