前言:之前一个eclipse项目的app项目迁移到Android studio项目的时候,运行app出现android.view.View android.widget.LinearLayout.getChildAt(int)' on a null object reference报错。app之前在eclipse中编译出来的是可以正常运行的。
定位错误发现在下面函数中的TextView tv = (TextView) layout.getChildAt(0):
private void showUntilCancel() {
if (canceled) { //如果已经取消显示,就直接return
return;
}
mToast = Toast.makeText(mContext, message,Toast.LENGTH_LONG);
LinearLayout layout = (LinearLayout) mToast.getView();
TextView tv = (TextView) layout.getChildAt(0);
tv.setTextSize(20);
tv.setTextColor(Color.parseColor("#ff0000"));
mToast.setGravity(gravity, 0, 100);
mToast.show();
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
showUntilCancel();
}
}, 3500);
}
log提示变量layout为空指针,这就比较奇怪了,eclipse中也是这样写的就没报错。区别就是Android studio中使用的 compileSdkVersion和targetSdkVersion版本是最新的,是基于33版本的,这个app之前是基于sdk 29版本的。
于是,尝试修改build.gradle文件中的targetSdkVersion和compileSdkVersion为29,重新编译运行没有报错了。编译后的app在Android13(SDK 33)中也是可以正常运行的。