一、吐槽
项目大版本一上线,然后我们公司买了崩溃监测的平台,一看一大串英文,一大串log,头疼,现在也改得头疼,不过差不多都已经解决了。
二、总结
1.1.问题描述
Caused by: java.lang.NullPointerException
at com.zhubajie.app.main_frame.UserCenterFragmentNew.d(Unknown Source)
at com.zhubajie.app.main_frame.UserCenterFragmentNew.g(Unknown Source)
at com.zhubajie.app.main_frame.UserCenterFragmentNew.d(Unknown Source)
at com.zhubajie.app.main_frame.v.onReceive(Unknown Source)
at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:763)
1.2.解决办法
定位到代码的地方发现:
mNickName.setText(userinfo.getNickname());
大概就是说userinfo.getNickname()可能为空,这样就导致错误。解决办法就是再实体类修改:
public String getNickname() {
return nickname;
}
把return nickname;改成return nickname == null ? "": nickname;
2.1问题描述
java.lang.IllegalArgumentException: View=com.android.internal.policy.impl.PhoneWindow$DecorView{42ed6e60 V.E..... R.....I. 0,0-960,1845} not attached to window manager
2.2解决办法
就是在dialog,dismiss的时候,它所依附的activity可能会null或者正在消失,你需要进行判断。
if (dialog != null && dialog.isShowing() && mActivity != null && !mActivity.isFinishing()) {
dialog.dismiss();
}
3.1问题描述
Caused by: java.lang.UnsupportedOperationException: Can't convert to dimension: type=0x12
3.2解决办法
注意你的布局文件中,margin好像低版本不兼容,可以改为padding。另外也有可能是api的兼容性,比如button.setBackground();低版本会不兼容。需要改为button.setBackgroundDrawable();其实进入setBackground()的源码,你可以发下基本都是用的setBackgroundDrawable()这个方法。
4.1问题描述
android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@28d6a16c is not valid; is your activity running?
4.2解决办法
因为new对话框的时候,参数content 指定成了this,即指向当前子Activity的content。但子Activity是动态创建的,不能保证一直存在。其父Activity的content是稳定存在的,将content替换为getParent()即可。
三、注意事项:
dialog在创建new,show,dismiss的时候都要考虑到所依附的activity为null或者正在结束的情况。
欢迎关注个人微信公众号,专注于Android深度文章和移动前沿技术分享