findViewById()引发NoSuchFieldError异常

30

我希望将两个安卓项目合并,一个是主要的项目,另一个作为库与之关联。 但是我在以下这行遇到了一些问题:

Button modificarC;
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_menu_calificaciones);
modificarC = (Button) findViewById(R.id.btn_aseso); //HERE

我尝试了Project Clean...并且我的依赖项中也有android-support-v4.jar。

以下是我的跟踪信息:

04-24 19:39:52.568: E/AndroidRuntime(9486): FATAL EXCEPTION: main
04-24 19:39:52.568: E/AndroidRuntime(9486): java.lang.NoSuchFieldError: com.utez.sistemas.sam.R$id.btn_aseso
04-24 19:39:52.568: E/AndroidRuntime(9486):     at com.utez.sistemas.sam.calificaciones.CalificacionesActivity.onCreate(CalificacionesActivity.java:67)
04-24 19:39:52.568: E/AndroidRuntime(9486):     at android.app.Activity.performCreate(Activity.java:4465)
04-24 19:39:52.568: E/AndroidRuntime(9486):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052)
04-24 19:39:52.568: E/AndroidRuntime(9486):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1932)
04-24 19:39:52.568: E/AndroidRuntime(9486):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1993)
04-24 19:39:52.568: E/AndroidRuntime(9486):     at android.app.ActivityThread.access$600(ActivityThread.java:127)
04-24 19:39:52.568: E/AndroidRuntime(9486):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1159)
04-24 19:39:52.568: E/AndroidRuntime(9486):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-24 19:39:52.568: E/AndroidRuntime(9486):     at android.os.Looper.loop(Looper.java:137)
04-24 19:39:52.568: E/AndroidRuntime(9486):     at android.app.ActivityThread.main(ActivityThread.java:4507)
04-24 19:39:52.568: E/AndroidRuntime(9486):     at java.lang.reflect.Method.invokeNative(Native Method)
04-24 19:39:52.568: E/AndroidRuntime(9486):     at java.lang.reflect.Method.invoke(Method.java:511)
04-24 19:39:52.568: E/AndroidRuntime(9486):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
04-24 19:39:52.568: E/AndroidRuntime(9486):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
04-24 19:39:52.568: E/AndroidRuntime(9486):     at dalvik.system.NativeStart.main(Native Method)

这是页面布局:

<LinearLayout
            style="@style/LoginFormContainer"
            android:layout_width="253dp"
            android:layout_height="260dp"
            android:layout_marginLeft="15dp"
            android:layout_marginTop="30dp"
            android:orientation="vertical" >

            <Button
                android:id="@+id/btn_alta"
                android:layout_width="match_parent"
                android:layout_height="63dp"
                android:layout_marginLeft="25dp"
                android:layout_marginTop="5dp"
                android:background="@drawable/btn_altacalif"
                android:contentDescription="@string/action_sign_in_register"
                android:paddingLeft="32dp"
                android:paddingRight="32dp"
                android:textAlignment="center" />

            <Button
                android:id="@+id/btn_aseso"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_marginLeft="25dp"
                android:layout_marginTop="5dp"
                android:layout_weight="0.16"
                android:background="@drawable/btn_modcalif"
                android:contentDescription="@string/action_sign_in_register"
                android:paddingLeft="32dp"
                android:paddingRight="32dp"
                android:textAlignment="center" />

        </LinearLayout>

btn_aseso 是不是你的 activity_menu_calificaciones 布局 XML 文件中的一个字段? - Steven
是的,我已经编辑了我的问题。 - Mauricio Zárate
你的布局看起来不错。这一定是你项目设置方面的问题。我猜 activity_menu_calificaciones 文件只存在于其中一个项目中。 - Steven
没问题,我在 AndroidManifest.xml 中声明了主项目中的所有活动,有些活动可以正常工作,但其中一个不行。 - Mauricio Zárate
@MauricioZárate 有什么解决方案吗?我也遇到了同样的错误! - LOG_TAG
4个回答

63

我也遇到了同样的错误,结果发现资源被覆盖了。

如果你有一个作为库的项目,在其中声明了某个 XML 文件中的 ID,然后主项目重新定义了该 XML,原始 ID 不见了,但直到运行时才会看到错误。

在我的情况下,合作伙伴从项目中删除并提交了 XML,然后将其添加回库项目中。Subclipse 似乎没有注意到这一点,因为我是最新的,但 XML 在主项目中是存在的。


41

嗯,我是中国人,我的英语不太好。

我也遇到了这个问题。

解决方法可能是: xml文件的名称重复了,例如:a.xml在您的库项目中,同时a.xml也在您的主要项目中。因此,请更改一个xml的名称。


这对我很有帮助。我遇到了这个问题。更改活动XML名称解决了问题。但是我真的想不出原因。 - JaydeepW
这很有帮助,我的问题现在已经解决了。我在两个库项目中有重复的xml文件,一个是框架,另一个是常用的,常用的使用框架作为库项目。从常用的中删除xml适合我,并解决了问题。 - Tahir Jilani
XML文件中没有该字段,该文件位于公共库项目中。框架中的文件被公共库项目中的文件替换,由于公共XML缺少该字段,因此会出现错误。愚蠢的错误:P - Tahir Jilani
谁说你的英语不好了? - Indra Kumar S

2
清理项目对我有用。

1
这个问题与重复的 XML 文件有关,在库项目和主项目中。 - Mahesh

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接