一个ButterKnife引起的bug-android.content.res.Resources$NotFoundException
2017-04-08 14:50
826 查看
做项目的时候遇到了一个奇异的bug,折腾了一大轮,虽然成因还是不确定,但终究是解决了。
情况是这样的,有一个列表需要显示,我用fragment对它进行显示,继承的是我封装的一个专门用来显示列表的BaseListFragment(这个封装里面是有使用到ButterKnife绑定的),它有一个addHeader()的方法,我可以addHeader进去。创建这个view之后我使用ButterKnife对这个view进行绑定,就像这样:
需要说明的是,我这个header是一个用于返回的标题栏,有一个几乎一模一样的标题栏已经存在在装载这个fragment的activity里,我仅仅是把这个标题栏的代码复制过来,调整了一下里面的东西,id什么的都没变。一切看起来都很美好,但是运行起来就炸掉了。
如上,找不到id了,我做了一堆排查,这个id是我添加的这个HeaderView里面的一个id,找到id之后看起来一切都结束了是不?Nonono...即使我把整个fragment的代码都删除掉了(这个实现类并不需要多少行代码,所以删起来很轻松),并且不再使用butterknife进行绑定,仍然是报这样的异常,无数次的clear、rebuild,都没有改变。
我重新建了一个fragment,把代码一点点搬过去,到了复制绑定的代码,又出现了同样的问题,我不想又新建一个fragment了。找到日志中的重点,就是那个butterknife生成的那个类:XXX_ViewBinding。它看起来是这样的:
就是里面这个id没有找到,删掉里面两行关于这个id的代码并没有起到作用,它仍然在下一次的代码构建中重新生成了。那我就想把这个生成的类删除掉,使用eventthing搜索到两条结果:
第一条结果是编译出来的,无法删掉,而第二条结果可以手动删除,删除第二条结果之后对项目rebuild一下,会发现第一条结果被清理掉了,重新运行这个fragment,完美运行,bug终于解决了。
8bc9
情况是这样的,有一个列表需要显示,我用fragment对它进行显示,继承的是我封装的一个专门用来显示列表的BaseListFragment(这个封装里面是有使用到ButterKnife绑定的),它有一个addHeader()的方法,我可以addHeader进去。创建这个view之后我使用ButterKnife对这个view进行绑定,就像这样:
需要说明的是,我这个header是一个用于返回的标题栏,有一个几乎一模一样的标题栏已经存在在装载这个fragment的activity里,我仅仅是把这个标题栏的代码复制过来,调整了一下里面的东西,id什么的都没变。一切看起来都很美好,但是运行起来就炸掉了。
FATAL EXCEPTION: main Process: com.w***e.suppliers, PID: 765 java.lang.RuntimeException: Unable to resume activity {com.w***e.suppliers/com.w***e.suppliers.base.activity.SingleFragmentActivity}: android.content.res.Resources$NotFoundException: Unable to find resource ID #0x7f0e0320 at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2799) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2828) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2263) at android.app.ActivityThread.access$800(ActivityThread.java:147) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1211) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5135) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:798) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:614) at dalvik.system.NativeStart.main(Native Method) Caused by: android.content.res.Resources$NotFoundException: Unable to find resource ID #0x7f0e0320 at android.content.res.Resources.getResourceEntryName(Resources.java:1879) at butterknife.internal.Utils.getResourceEntryName(Utils.java:190) at butterknife.internal.Utils.findRequiredView(Utils.java:137) at com.w***e.suppliers.app.***ch.stockout.view.StockoutFragment_ViewBinding.<init>(StockoutFragment_ViewBinding.java:24) at java.lang.reflect.Constructor.constructNative(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at com.zeroturnaround.jrebel.android.runtime.reload.runtime.reflection.ReflectionConstructorHelper.newInstance(SourceFile:141) at butterknife.ButterKnife.createBinding(ButterKnife.java:199) at butterknife.ButterKnife.bind(ButterKnife.java:172) at com.w***e.suppliers.base.fragment.BaseFragment.onCreateView(BaseFragment.java:79) at android.support.v4.app.Fragment.performCreateView(Fragment.java:2184) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1298) at android.support.v4.app.FragmentManagerImpl.moveFragmentsToInvisible(FragmentManager.java:2323) at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2136) at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2092) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1998) at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:388) at android.support.v4.app.FragmentActivity.onResume(FragmentActivity.java:488) at nucleus.view.NucleusAppCompatActivity.onResume(NucleusAppCompatActivity.java:69) at com.w***e.suppliers.base.activity.BaseActivity.onResume(BaseActivity.java:93) at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1192) at cn.jiguang.a.a.c.a.a.d.callActivityOnResume(Unknown Source) at android.app.Activity.performResume(Activity.java:5435) at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2789) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2828) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2263) at android.app.ActivityThread.access$800(ActivityThread.java:147) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1211) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5135) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:798) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:614) at dalvik.system.NativeStart.main(Native Method)
如上,找不到id了,我做了一堆排查,这个id是我添加的这个HeaderView里面的一个id,找到id之后看起来一切都结束了是不?Nonono...即使我把整个fragment的代码都删除掉了(这个实现类并不需要多少行代码,所以删起来很轻松),并且不再使用butterknife进行绑定,仍然是报这样的异常,无数次的clear、rebuild,都没有改变。
我重新建了一个fragment,把代码一点点搬过去,到了复制绑定的代码,又出现了同样的问题,我不想又新建一个fragment了。找到日志中的重点,就是那个butterknife生成的那个类:XXX_ViewBinding。它看起来是这样的:
就是里面这个id没有找到,删掉里面两行关于这个id的代码并没有起到作用,它仍然在下一次的代码构建中重新生成了。那我就想把这个生成的类删除掉,使用eventthing搜索到两条结果:
第一条结果是编译出来的,无法删掉,而第二条结果可以手动删除,删除第二条结果之后对项目rebuild一下,会发现第一条结果被清理掉了,重新运行这个fragment,完美运行,bug终于解决了。
8bc9
相关文章推荐
- setText() 引起 android.content.res.Resources$NotFoundException
- 解决android.content.res.Resources NotFoundException的一个方法
- Android Studio 3.0 Canary 6 release bug android.content.res.Resources$NotFoundException
- 【BUG】android.content.res.Resources$NotFoundException: File res/drawable-xxhdpi/toolbar_line.png from
- bug android.content.res.Resources$NotFoundException: String resource ID #0x0
- setText()的一个细节导致android.content.res.Resources$NotFoundException: String resource ID #0x7
- 解决android.content.res.Resources NotFoundException的一个方法
- 解决android.content.res.Resources NotFoundException的一个方法(转)
- 【BUG】android.content.res.Resources$NotFoundException: File res/drawable-xxhdpi/toolbar_line.png from
- android.content.res.Resources$NotFoundException解决方案
- 关于Android中android.content.res.Resources$NotFoundException: String resource ID #0x9这类问题的解决
- android.content.res.Resources$NotFoundException错误的解决办法
- android.content.res.Resources$NotFoundException: String resource ID #0x6d
- android.content.res.Resources$NotFoundException: String resource ID #0x0
- android.content.res.Resources$NotFoundException: String resource ID #0x0 找不到资源文件ID #0x0
- Android: android.content.res.Resources$NotFoundException: Resource ID #0x7f030009
- android.content.res.Resources$NotFoundException: String resource ID #0x7f050016
- android.content.res.Resources$NotFoundException:String resource ID #0x86
- android.content.res.Resources$NotFoundException: String resource ID #0x6错误的解决办法
- android:android.content.res.Resources$NotFoundException: String resource ID #..