web-dev-qa-db-fra.com

java.lang.NoSuchMethodError: pas d'envoi de méthode statique Unhandled KeyEvent Pre

Lors de la migration vers androidx, j'obtiens une erreur supérieure lorsque j'appuie en arrière.

   Java.lang.NoSuchMethodError: No static method dispatchUnhandledKeyEventPre(Landroid/view/View;Landroid/view/KeyEvent;)Z in class Landroidx/core/view/ViewCompat; or its super classes (declaration of 'androidx.core.view.ViewCompat' appears in 1/split_lib_dependencies_apk.apk)
    at androidx.appcompat.app.AppCompatDelegateImpl.dispatchKeyEvent(AppCompatDelegateImpl.Java:1162)
    at androidx.appcompat.app.AppCompatDelegateImpl$AppCompatWindowCallback.dispatchKeyEvent(AppCompatDelegateImpl.Java:2529)
    at androidx.appcompat.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.Java:59)
    at com.Android.internal.policy.DecorView.dispatchKeyEvent(DecorView.Java:329)
    at Android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.Java:4792)
    at Android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.Java:4759)
    at Android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.Java:4082)
    at Android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.Java:4135)
    at Android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.Java:4101)
    at Android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.Java:4109)
    at Android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.Java:4082)
    at Android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.Java:4135)
    at Android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.Java:4101)
    at Android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.Java:4257)
    at Android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.Java:4109)
    at Android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.Java:4314)
    at Android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.Java:4082)
    at Android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.Java:4135)
    at Android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.Java:4101)
    at Android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.Java:4109)
    at Android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.Java:4082)
    at Android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.Java:4135)
    at Android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.Java:4101)
    at Android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.Java:4290)
    at Android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.Java:4451)
    at Android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.Java:2434)
    at Android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.Java:1998)
    at Android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.Java:1989)
    at Android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.Java:2411)
    at Android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.Java:141)
    at Android.os.MessageQueue.nativePollOnce(Native Method)
    at Android.os.MessageQueue.next(MessageQueue.Java:323)
    at Android.os.Looper.loop(Looper.Java:136)
    at Android.app.ActivityThread.main(ActivityThread.Java:6351)
    at Java.lang.reflect.Method.invoke(Native Method)
    at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:896)
    at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:786)

Je pense que dans la classe ViewCompat n’a pas de méthode dispatchUnhandledKeyEventPre. J'utilise une dépendance à un tiers donc je ne sais pas quelle méthode est la cause

4
john smith

vérifiez que vous utilisez la version 1.0.0-beta01 de la bibliothèque appcompat

4
Melvin Kent

Pour moi, aller dans le fichier gradle.build et s’assurer que toutes les dépendances sont à jour (nouvelles versions) ont résolu le problème.

3

La réponse acceptée, bien que correcte, deviendra obsolète dans un avenir proche lorsque de nouvelles versions de appcompat seront publiées, car la réponse est très spécifique à une période donnée.

La réponse générale est que cela se produit lorsque vous utilisez différentes versions mixtes de appcompat (bibliothèque appcompat) dans votre projet, elles tendent à être incompatibles les unes avec les autres plus souvent. Vous devez vérifier si vous utilisez la dernière version de la bibliothèque appcompat chaque fois que vous mettez à jour des API via le gestionnaire de SDK. Il est plutôt très facile de mettre à jour si vous utilisez Android Studio.

Allez à votre build.gradle (Module: app) et examinez les dépendances. Il est fort probable que Gradle Linter vous indiquera déjà l’erreur selon laquelle vous utilisez différentes versions de la bibliothèque appcompat et si une version plus récente est disponible ou non. Si vous survolez ces lignes en surbrillance, toutes les informations dont vous avez besoin, y compris la version que vous utilisez et la dernière version disponible, ainsi que le fait que toutes les dépendances soient sur la même version ou non Suivez les instructions, corrigez-les, puis exécutez un gradle sync et tout devrait bien se passer.

Par exemple, j'utilisais des versions mixtes de com.Android.support:appcompat-v7:28.0.0-alpha3, com.Android.support:design:28.0.0 et com.Android.support.constraint:constraint-layout:1.1.2 alors que les dernières étaient v28.0.0 et v1.1.3.

J'espère que cela t'aides.

1
Sajib Acharya