niorgai / StatusBarCompat

Status Bar Utils ---- Change Status Bar Mode Simply
http://niorgai.github.io/2016/03/20/Android-transulcent-status-bar/
MIT License
2.16k stars 349 forks source link

testin测试发生多次崩溃异常java.lang.NullPointerException #50

Closed liang530 closed 5 years ago

liang530 commented 5 years ago

异常日志: 06-17 19:42:08.612 E/AndroidRuntime(18651): Process: com.yanshiv8.huosuapp, PID: 18651 06-17 19:42:08.612 E/AndroidRuntime(18651): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.yanshiv8.huosuapp/com.etsdk.game.ui.game.details.NewGameDetailsActivity}: java.lang.NullPointerException 06-17 19:42:08.612 E/AndroidRuntime(18651): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2429) 06-17 19:42:08.612 E/AndroidRuntime(18651): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2493) 06-17 19:42:08.612 E/AndroidRuntime(18651): at android.app.ActivityThread.access$800(ActivityThread.java:166) 06-17 19:42:08.612 E/AndroidRuntime(18651): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1283) 06-17 19:42:08.612 E/AndroidRuntime(18651): at android.os.Handler.dispatchMessage(Handler.java:102) 06-17 19:42:08.612 E/AndroidRuntime(18651): at android.os.Looper.loop(Looper.java:136) 06-17 19:42:08.612 E/AndroidRuntime(18651): at android.app.ActivityThread.main(ActivityThread.java:5584) 06-17 19:42:08.612 E/AndroidRuntime(18651): at java.lang.reflect.Method.invokeNative(Native Method) 06-17 19:42:08.612 E/AndroidRuntime(18651): at java.lang.reflect.Method.invoke(Method.java:515) 06-17 19:42:08.612 E/AndroidRuntime(18651): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268) 06-17 19:42:08.612 E/AndroidRuntime(18651): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084) 06-17 19:42:08.612 E/AndroidRuntime(18651): at dalvik.system.NativeStart.main(Native Method) 06-17 19:42:08.612 E/AndroidRuntime(18651): Caused by: java.lang.NullPointerException 06-17 19:42:08.612 E/AndroidRuntime(18651): at qiu.niorgai.StatusBarCompatKitKat.translucentStatusBar(StatusBarCompatKitKat.java:142) 06-17 19:42:08.612 E/AndroidRuntime(18651): at qiu.niorgai.StatusBarCompat.translucentStatusBar(StatusBarCompat.java:58) 06-17 19:42:08.612 E/AndroidRuntime(18651): at com.etsdk.game.base.BaseActivity.setContentView(BaseActivity.java:191) 06-17 19:42:08.612 E/AndroidRuntime(18651): at com.etsdk.game.ui.game.details.NewGameDetailsActivity.onCreate(NewGameDetailsActivity.java:98) 06-17 19:42:08.612 E/AndroidRuntime(18651): at android.app.Activity.performCreate(Activity.java:5442) 06-17 19:42:08.612 E/AndroidRuntime(18651): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094) 06-17 19:42:08.612 E/AndroidRuntime(18651): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2393) 06-17 19:42:08.612 E/AndroidRuntime(18651): ... 11 more

这上面的报错的行数不对,我查看了下smali文件,报错代码:

image

具体对应代码 static void translucentStatusBar(Activity activity) { Window window = activity.getWindow(); window.addFlags(67108864); ViewGroup mContentView = (ViewGroup)activity.findViewById(16908290); //此处mContentView可能为null,导致崩溃 View mContentChild = mContentView.getChildAt(0); removeFakeStatusBarViewIfExist(activity); removeMarginTopOfContentChild(mContentChild, getStatusBarHeight(activity)); if (mContentChild != null) { ViewCompat.setFitsSystemWindows(mContentChild, false); } }

niorgai commented 5 years ago

ContentView 就是 window.findViewById(Window.ID_ANDROID_CONTENT) 一般不会为 null. 可以看下你的布局代码吗? 是在 setContentView 之后调用的?

liang530 commented 5 years ago

在4.4的安卓机型上使用getWindow().setContentView(自己的view) 设置布局,此translucentStatusBar 库会报上诉错误,改成setContentView(自己的view) 后正常。