web-dev-qa-db-fra.com

Android: Java.land.NoSuchFieldError après la mise à jour du SDK 23

J'ai mis à jour le SDK 23 et mis à jour le gradle.build vers l'API 23, la bibliothèque de support technique vers 23.0.0, etc. et j'obtiens maintenant l'erreur suivante lorsque j'essaie d'exécuter l'application (la compilation est parfaite).

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)

Je suis revenu à l'API 22 sur tout et j'ai toujours l'erreur.

25
mraviator

J'ai fait quelque chose comme vous, mais j'ai trouvé que Gradle peut résoudre les dépendances., Dans les bibliothèques externes, je ne trouve pas support-v4-23.0.0, support-v7-23.0.0 et autres lib est 23.0.0 . puis je suis revenu à la compilation 'com.Android.support:support-v4:22.2.0',... le solutionneur de problèmes @mraviator

13
sanemars

Merci @zmarties pour la réponse, je veux ajouter les détails et les liens 

  1. Supprimer 'com.actionbarsherlock: actionbarsherlock: 4.4.0@aar' de gradle
  2. Téléchargez le module actionbarsherlock à partir de ce lien
  3. Vérifiez que vous disposez de 'com.Android.support:support-v4:20.0.0' ou 23
  4. Ouvrez le module actionbarsherlock src changez FloatMath en Math dans AnimatorProxy.Java
  5. Ouvrez le module actionbarsherlock src, créez des fragments de variable dans l'étendue au niveau de la classe, sous la forme fragments FragmentManagerImpl = (FragmentManagerImpl) this.getSupportFragmentManager (); dans Watson.Java
  6. Remplacer toutes les occurrences de mFragments par la variable fragments

Merci pour les réponses ci-dessus.

12
Subtain Ishfaq

Utiliser Google Play Services version 8.1.0 au lieu de 8.4.0 résolu de mon côté

6
ergunkocak

J'ai constaté que je pouvais créer ActionBarSherlock à l'aide du SDK 23 si j'avais apporté les deux ensembles de modifications suivants:

  • dans AnimatorProxy.Java, remplacez les appels FloatMath par leurs appels Math correspondants
  • dans Watson.Java, remplacez l'utilisation du champ mFragments par une variable locale fragments initialisée via getActiveFragments(null), puis modifiez les références mFragment pour utiliser la variable locale 
3
zmarties

Avez-vous changé la vue du thème dans la disposition principale à partir de l'onglet Conception? Essayez de le changer à nouveau en vue de thème Sherlock dans l’onglet Conception.

0
Leandro Latorre

j'ai eu le même problème lorsque le projet d'importation Eclipse à Android Studio

C'est la meilleure solution pour moi

J'ai constaté que je pouvais créer ActionBarSherlock à l'aide du SDK 23 si j'avais apporté les deux ensembles de modifications suivants:

dans AnimatorProxy.Java, remplacez les appels FloatMath par leurs appels Math correspondants - je change FloatMath - en Math

dans la classe Waston, j’avais l’erreur - mFragments.isadded Donc, je remplace le code suivant au lieu de vérifier 

mFragments.isadded! = null

à 

mFragments.getActiveFragments (mCreatedMenus)

partout quand il le fallait

j'avais résoudre ces problèmes.

0
Navin