wake-up-neo.com

Android: Java.land.NoSuchFieldError nach dem Update auf SDK 23

Ich habe das SDK 23 und das gradle.build auf API 23 aktualisiert, die Bibliotheksunterstützung auf 23.0.0 usw. und erhalte jetzt die folgende Fehlermeldung, wenn ich versuche, die App auszuführen (kompiliert das Ganze).

Java.lang.NoSuchFieldError: No instance field mFragments of type Landroid/support/v4/app/FragmentManagerImpl; in class Landroid/support/v4/app/Watson; or its superclasses (declaration of 'Android.support.v4.app.Watson' appears in /data/app/com.my.app-1/base.apk)
            at Android.support.v4.app.Watson.onCreatePanelMenu(Watson.Java:50)
            at com.actionbarsherlock.ActionBarSherlock.callbackCreateOptionsMenu(ActionBarSherlock.Java:560)
            at com.actionbarsherlock.internal.ActionBarSherlockNative.dispatchCreateOptionsMenu(ActionBarSherlockNative.Java:64)
            at com.actionbarsherlock.app.SherlockFragmentActivity.onCreatePanelMenu(SherlockFragmentActivity.Java:164)
            at com.Android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.Java:548)
            at com.Android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.Java:917)
            at com.Android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.Java:258)
            at Android.os.Handler.handleCallback(Handler.Java:739)
            at Android.os.Handler.dispatchMessage(Handler.Java:95)
            at Android.os.Looper.loop(Looper.Java:135)
            at Android.app.ActivityThread.main(ActivityThread.Java:5221)
            at Java.lang.reflect.Method.invoke(Native Method)
            at Java.lang.reflect.Method.invoke(Method.Java:372)
            at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:899)
            at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:694)

Ich habe alles auf API 22 zurückgesetzt und bekomme immer noch den Fehler.

25
mraviator

Ich habe etwas getan wie Sie, aber ich fand gradle Abhängigkeiten lösen kann, in externen Bibliotheken kann ich nicht support-v4-23.0.0, support-v7-23.0.0 und andere Bibliotheken finden, die die Version sind ist 23.0.0 . dann kehrte ich zurück zum kompilieren 'com.Android.support:support-v4:22.2.0' , der Problemlöser @mraviator

13
sanemars

Vielen Dank @zmarties für die Antwort, ich möchte die Details und Links hinzufügen 

  1. Entfernen Sie "com.actionbarsherlock: actionbarsherlock: [email protected]" von gradle
  2. Laden Sie das actionbarsherlock-Modul von diesem Link herunter! 
  3. Vergewissern Sie sich, dass Sie über "com.Android.support:support-v4:20.0.0" oder 23 verfügen
  4. Öffnen Sie das Actionbarsherlock-Modul src, um FloatMath in AnimatorProxy.Java in Math zu ändern
  5. Öffnen Sie das Modul actionbarsherlock. Src erstellt variable Fragmente im Klassenebenenbereich als FragmentManagerImpl-Fragmente = (FragmentManagerImpl) this.getSupportFragmentManager (); in Watson.Java
  6. Ersetzen Sie alle Vorkommen von mFragments durch die Variable fragments

Danke für die obigen Antworten.

12
Subtain Ishfaq

Die Verwendung von Google Play Services Version 8.1.0 anstelle von 8.4.0 wurde von meiner Seite behoben

6
ergunkocak

Ich habe festgestellt, dass ich ActionBarSherlock mit SDK 23 erstellen könnte, wenn ich die folgenden zwei Änderungen vorgenommen habe:

  • ersetzen Sie in AnimatorProxy.Java FloatMath-Aufrufe durch ihre entsprechenden Math-Aufrufe
  • ersetzen Sie in Watson.Java die Verwendung des Felds mFragments durch eine lokale Variable fragments, die über getActiveFragments(null) initialisiert wurde, und ändern Sie dann die Verweise mFragment in die lokale Variable 
3
zmarties

Haben Sie die Designansicht im Hauptlayout auf der Registerkarte Design geändert? Versuchen Sie, es auf der Design-Registerkarte erneut in eine Sherlock-Designansicht zu ändern.

0
Leandro Latorre

ich hatte das gleiche Problem, als ich das Projekt Eclipse in Android Studio importierte

Das ist die beste Lösung für mich

Ich habe festgestellt, dass ich ActionBarSherlock mit SDK 23 erstellen könnte, wenn ich die folgenden zwei Änderungen vorgenommen habe:

ersetzen Sie in AnimatorProxy.Java FloatMath-Aufrufe durch ihre entsprechenden Math-Aufrufe - ich ändere FloatMath - in Math

in Waston Class hatte ich den Fehler - mFragments.isadded Also, Ich ersetze den folgenden Code, anstatt zu prüfen 

mFragments.isadded! = null

zu 

mFragments.getActiveFragments (mCreatedMenus)

immer wenn es nötig ist

ich hatte diese Probleme gelöst.

0
Navin