我正在使用辅助功能服务,我正面临一个非常奇怪的NPE
.
在onAccessibilityEvent(AccessibilityEvent event)
方法里面我有这个代码。
if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_CLICKED
&& event.getSource() != null) {
AccessibilityNodeInfo source = event.getSource();
if (waiting && source.isEditable()) {
.....
}else if (!waiting && source.isEditable()) {
.....
}
我收到的崩溃报告说,isEditable()
即使我检查了它不是空指针,它也是在空指针上执行的。不幸的是,这不会发生在我的任何设备上。另一个奇怪的事情是 NP 只在else if
,if
被检查没有任何问题。
这是我以前的代码
AccessibilityNodeInfo source = event.getSource();
if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_CLICKED
&& source != null) {....
朋友建议我切换到第一个代码(检查然后分配),但它仍然没有帮助
感谢您提前提供任何帮助。
编辑: 大多数时候,我认为这waiting
就是大部分从false
NPE
else if
编辑2:
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.view.accessibility.AccessibilityNodeInfo.isEditable()' on a null object reference
at com.dhm47.nativeclipboard.AccesService.onAccessibilityEvent(AccesService.java:184)
at android.accessibilityservice.AccessibilityService$1.onAccessibilityEvent(AccessibilityService.java:659)
at android.accessibilityservice.AccessibilityService$IAccessibilityServiceClientWrapper.executeMessage(AccessibilityService.java:752)
at com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:37)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
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:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
这isEditable()
是 Android 的一部分,请参见isEditable()