如下:
E/AndroidRuntime(11807): FATAL EXCEPTION: main
E/AndroidRuntime(11807): java.lang.NullPointerException
E/AndroidRuntime(11807): at com.android.launcher2.HideFromAccessibilityHelper.restoreImportantForAccessibilityHelper(HideFromAccessibilityHelper.java:68)
E/AndroidRuntime(11807): at com.android.launcher2.HideFromAccessibilityHelper.onChildViewRemoved(HideFromAccessibilityHelper.java:102)
E/AndroidRuntime(11807): at android.view.ViewGroup.onViewRemoved(ViewGroup.java:3371)
E/AndroidRuntime(11807): at android.view.ViewGroup.removeDetachedView(ViewGroup.java:3939)
E/AndroidRuntime(11807): at android.widget.AbsListView.access$5700(AbsListView.java:93)
E/AndroidRuntime(11807): at android.widget.AbsListView$RecycleBin.pruneScrapViews(AbsListView.java:6800)
E/AndroidRuntime(11807): at android.widget.AbsListView$RecycleBin.scrapActiveViews(AbsListView.java:6779)
E/AndroidRuntime(11807): at android.widget.GridView.layoutChildren(GridView.java:1273)
E/AndroidRuntime(11807): at android.widget.AbsListView.onLayout(AbsListView.java:2037)
E/AndroidRuntime(11807): at android.view.View.layout(View.java:14099)
E/AndroidRuntime(11807): at android.view.ViewGroup.layout(ViewGroup.java:4464)
E/AndroidRuntime(11807): at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1021)
E/AndroidRuntime(11807): at android.view.View.layout(View.java:14099)
E/AndroidRuntime(11807): at android.view.ViewGroup.layout(ViewGroup.java:4464)
E/AndroidRuntime(11807): at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
E/AndroidRuntime(11807): at android.view.View.layout(View.java:14099)
E/AndroidRuntime(11807): at android.view.ViewGroup.layout(ViewGroup.java:4464)
E/AndroidRuntime(11807): at com.android.launcher2.ShortcutAndWidgetContainer.onLayout(ShortcutAndWidgetContainer.java:124)
E/AndroidRuntime(11807): at android.view.View.layout(View.java:14099)
E/AndroidRuntime(11807): at android.view.ViewGroup.layout(ViewGroup.java:4464)
E/AndroidRuntime(11807): at com.android.launcher2.CellLayout.onLayout(CellLayout.java:1031)
E/AndroidRuntime(11807): at android.view.View.layout(View.java:14099)
E/AndroidRuntime(11807): at android.view.ViewGroup.layout(ViewGroup.java:4464)
E/AndroidRuntime(11807): at com.android.launcher2.PagedView.onLayout(PagedView.java:680)
E/AndroidRuntime(11807): at com.android.launcher2.Workspace.onLayout(Workspace.java:1358)
E/AndroidRuntime(11807): at android.view.View.layout(View.java:14099)
E/AndroidRuntime(11807): at android.view.ViewGroup.layout(ViewGroup.java:4464)
E/AndroidRuntime(11807): at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
E/AndroidRuntime(11807): at com.android.launcher2.DragLayer.onLayout(DragLayer.java:410)
E/AndroidRuntime(11807): at android.view.View.layout(View.java:14099)
E/AndroidRuntime(11807): at android.view.ViewGroup.layout(ViewGroup.java:4464)
E/AndroidRuntime(11807): at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
E/AndroidRuntime(11807): at android.view.View.layout(View.java:14099)
E/AndroidRuntime(11807): at android.view.ViewGroup.layout(ViewGroup.java:4464)
E/AndroidRuntime(11807): at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
E/AndroidRuntime(11807): at android.view.View.layout(View.java:14099)
E/AndroidRuntime(11807): at android.view.ViewGroup.layout(ViewGroup.java:4464)
E/AndroidRuntime(11807): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1670)
E/AndroidRuntime(11807): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1528)
E/AndroidRuntime(11807): at android.widget.LinearLayout.onLayout(LinearLayout.java:1441)
E/AndroidRuntime(11807): at android.view.View.layout(View.java:14099)
E/AndroidRuntime(11807): at android.view.ViewGroup.layout(ViewGroup.java:4464)
E/AndroidRuntime(11807): at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
E/AndroidRuntime(11807): at android.view.View.layout(View.java:14099)
E/AndroidRuntime(11807): at android.view.ViewGroup.layout(ViewGroup.java:4464)
E/AndroidRuntime(11807): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2183)
E/AndroidRuntime(11807): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1947)
E/AndroidRuntime(11807): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1139)
E/AndroidRuntime(11807): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4879)
E/AndroidRuntime(11807): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:776)
E/AndroidRuntime(11807): at android.view.Choreographer.doCallbacks(Choreographer.java:579)
E/AndroidRuntime(11807): at android.view.Choreographer.doFrame(Choreographer.java:548)
E/AndroidRuntime(11807): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:762)
E/AndroidRuntime(11807): at android.os.Handler.handleCallback(Handler.java:725)
E/AndroidRuntime(11807): at android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime(11807): at android.os.Looper.loop(Looper.java:153)
E/AndroidRuntime(11807): at android.app.ActivityThread.main(ActivityThread.java:5299)
E/AndroidRuntime(11807): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(11807): at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(11807): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
E/AndroidRuntime(11807): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
E/AndroidRuntime(11807): at dalvik.system.NativeStart.main(Native Method)
E/AppErrorDialog( 545): Failed to get ILowStorageHandle instance
HideFromAccessibilityHelper.java第68行代码如下
private void restoreImportantForAccessibilityHelper(View v) {
v.setImportantForAccessibility(mPreviousValues.get(v));//第68行
mPreviousValues.remove(v);
调试几遍发现v不为空,mPreviousValues这个hashMap(View, Integer)也不为空,可是报了空指针异常。
原来View.java中该方法定义如下:
public void setImportantForAccessibility(int mode) {
if (mode != getImportantForAccessibility()) {
mPrivateFlags2 &= ~PFLAG2_IMPORTANT_FOR_ACCESSIBILITY_MASK;
mPrivateFlags2 |= (mode << PFLAG2_IMPORTANT_FOR_ACCESSIBILITY_SHIFT)
& PFLAG2_IMPORTANT_FOR_ACCESSIBILITY_MASK;
notifyAccessibilityStateChanged();
}
}
其中参数为int,而我们上述使用中参数却为Integer,这必然有一个类型转换的问题,当hashMap中的Integer对象为空是,这一隐藏的类型转换导致了空指针异常,这也是为什么查不出哪个值为空的原因。
一段测试程序如下:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Integer a = null;
int b = a;
}
FATAL EXCEPTION: main
E/AndroidRuntime(12233): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sean.test/com.sean.test.MainActivity}: java.lang.NullPointerException
E/AndroidRuntime(12233): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2306)
E/AndroidRuntime(12233): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358)
E/AndroidRuntime(12233): at android.app.ActivityThread.access$600(ActivityThread.java:156)
E/AndroidRuntime(12233): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1340)
E/AndroidRuntime(12233): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(12233): at android.os.Looper.loop(Looper.java:153)
E/AndroidRuntime(12233): at android.app.ActivityThread.main(ActivityThread.java:5299)
E/AndroidRuntime(12233): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(12233): at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(12233): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
E/AndroidRuntime(12233): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
E/AndroidRuntime(12233): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(12233): Caused by: java.lang.NullPointerException
E/AndroidRuntime(12233): at com.sean.test.MainActivity.onCreate(MainActivity.java:17)
E/AndroidRuntime(12233): at android.app.Activity.performCreate(Activity.java:5122)
E/AndroidRuntime(12233): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081)
E/AndroidRuntime(12233): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270)
E/AndroidRuntime(12233): ... 11 more
E/AppErrorDialog( 545): Failed to get ILowStorageHandle instance