web-dev-qa-db-ja.com

findViewById()のNoSuchFieldError

マージしたい2つのAndroidプロジェクトがあります。1つはメインで、もう1つはライブラリとしてリンクされています。しかし、この行でいくつか問題があります。

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

ProjectCleanを試しました...依存関係に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>
29

同じエラーが発生しましたが、リソースが上書きされたことがわかりました。

特定のXMLファイルでIDを宣言するライブラリとして機能しているプロジェクトが1つある場合、メインプロジェクトはそのXMLを再定義し、元のIDは失われますが、実行時までエラーは表示されません。

私の場合、パートナーがプロジェクトからXMLを削除してコミットし、ライブラリプロジェクトに追加し直しました。 Subclipseは私が最新だったので気づかなかったようですが、XMLはメインプロジェクトにありました。

63
Moxor

ええと、私は中国人です。私の英語は上手ではありません。

私も質問を受けました。

解決策は次のとおりです: xmlファイルの名前が繰り返されます。たとえば、:a.xmlはライブラリプロジェクトにあり、同時にa.xmlはメインプロジェクトにあります。そのため、xml名の1つを変更してください。

39
Bingchean

@Moxorのソリューションについて詳しく説明するには、次のいずれかを実行できます。

  1. ダミーのレイアウトxmlをデカラレし、欠落しているIDをいくつかのダミーのビューに割り当てます。
  2. 文字列リソースを宣言するのと同じ方法で、不足しているIDをリソースとして宣言します。 http://developer.Android.com/guide/topics/resources/more-resources.html#Id
2
Vaiden

プロジェクトの掃除は私のために働いた。

0
Nigel Nindo