java.lang.NoSuchFieldError: No static field xxx of type I in class Lcom/XX/R$id; or its superclasses

时间:2021-02-07 00:42:36

问题描述

java.lang.NoSuchFieldError: No static field xxx of type I in class Lcom/XX/R$id; or its superclasses

问题分析

首先,在调用 findViewById 之前,必然是在 activity 中设置了setContentView,或者在 Fragment 中重载了onCreatedView 方法,加载了相应的布局文件。对于 activity,findViewById遍历的根节点就是 setContentView 初始化的布局。

安卓在调用findViewById 时会对相应的layout进行遍历查找,如果没有则返回null。同样的NoSuchFieldError是Java反射中的一个异常,其表示无法通过反射找到需要的字段。

那么在布局文件存在,并且包含了所要findViewById的组建的情况下,为什么会报NoSuchFieldError呢?因为一个安卓项目可能包含多个module,在不同的module中可能包含相同名字的布局文件,这种情况下,通过setContentView加载的布局很有可能不是本身module内的布局。

解决方法

多个module的项目中,不应出现多个相同名称的布局文件,有的话重命名一下。