java.lang.IllegalStateException:无法在未密封的实例上执行此操作

问题描述 投票:2回答:1

我正在使用辅助功能服务在屏幕上找到一个按钮并单击它,但由于某种原因,我收到以下错误:

java.lang.IllegalStateException: Cannot perform this action on a not sealed instance.
    at android.view.accessibility.AccessibilityNodeInfo.enforceSealed(AccessibilityNodeInfo.java:3046)
    at android.view.accessibility.AccessibilityNodeInfo.findAccessibilityNodeInfosByText(AccessibilityNodeInfo.java:1529)
    at com.myapp.adapters.Adapter_Click$11.run(Adapter_Click.java:1874)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6718)
    at java.lang.reflect.Method.invoke(Method.java:-2)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

它指的是:

List<AccessibilityNodeInfo> list = source.findAccessibilityNodeInfosByText("Accept".toLowerCase());

然后我用它来点击按钮:

if (view.performAction(AccessibilityNodeInfo.ACTION_CLICK)) 
{
  Log.e(TAG, "Button clicked");
}

在我刚刚更新到AndroidX之前,去年我没有看到任何问题。有没有办法在尝试点击之前检查它是否是密封的实例?我甚至试图将它包装在try / catch中,它仍然会崩溃我的应用程序。

android accessibilityservice
1个回答
0
投票

完成密封以使节点不可变。当服务在回收后使用节点时,通常会出现这种异常。

© www.soinside.com 2019 - 2024. All rights reserved.