java.lang.NoSuchMethodError: No static method dispatch Unhan



迁移到androidx时,我在按回键时出现上述错误。

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)

我认为在ViewCompat类中没有dispatchUnhandledKeyEventPre方法。我正在使用一些第三方依赖项,所以我不知道哪种方法导致它

检查您使用的是 1.0.0-beta01 版本的 appcompat 库

对我来说,转到gradle.build文件并确保所有依赖项都是最新的(新版本(解决了这个问题。

接受的答案虽然正确,但在不久的将来,当新版本的appcompat发布时,答案将过时,因为答案非常特定于特定的时间范围。

一般的答案是,当您在项目中使用appcompat(appcompat 库(的不同混合版本时,就会发生这种情况,它们往往更频繁地相互不兼容。每次通过 SDK 管理器更新某些 API 时,都必须检查是否正在使用最新版本的 appcompat 库。如果您使用的是Android Studio,则更新非常容易。

转到您的build.gradle (Module: app)并查看依赖项。gradle linter 很可能已经向您显示错误,即您正在使用不同版本的 appcompat 库以及是否有更新的版本可用。如果将鼠标悬停在这些突出显示的行上,它将为您提供所需的所有信息,包括您正在使用的版本和最新的可用版本以及所有依赖项是否位于同一版本上。按照提示操作,修复它们,然后运行gradle sync,您应该没问题。

例如,我使用的是com.android.support:appcompat-v7:28.0.0-alpha3com.android.support:design:28.0.0com.android.support.constraint:constraint-layout:1.1.2的混合版本,而最新的版本是v28.0.0v1.1.3

希望这有帮助。

相关内容

最新更新