在 android 8 上使用 android 数据绑定时应用崩溃
App crashing when using android data-binding on android 8
代码在 oreo 之前的设备上工作,但 Crashlytics 说它在
android 8 台设备
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getAppComponent().inject(this);
binding = DataBindingUtil.setContentView(this, R.layout.main_activity);
}
堆栈跟踪
java.lang.NullPointerException: Attempt to invoke virtual method 'int
android.view.ViewGroup.getChildCount()' on a null object reference
Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.ViewGroup.getChildCount()' on a null object reference
at android.databinding.DataBindingUtil.bindToAddedViews(DataBindingUtil.java:295)
at android.databinding.DataBindingUtil.setContentView(DataBindingUtil.java:279)
at android.databinding.DataBindingUtil.setContentView(DataBindingUtil.java:261)
at com.myapp.MyActivity.onCreate(MyActivity.java:59)
at android.app.Activity.performCreate(Activity.java:7174)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2910)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032)
at android.app.ActivityThread.-wrap11(Unknown Source)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6940)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
在 8 上使用完全相同的堆栈跟踪发生类似的崩溃。
您是否尝试过使用:
binding = DataBindingUtil.inflate(getLayoutInflater(), R.layout.activity, null, false);
setContentView(binding.getRoot());
上面代码和调用的区别
DataBindingUtil.setContentView(...);
就是inflate()
returns直接一个View
,后来传给DataBindingUtils::bindToAddedViews
。
在 DataBindingUtil.setContentView
的情况下,正在使用以下逻辑
activity.setContentView(layoutId);
View decorView = activity.getWindow().getDecorView();
ViewGroup contentView = (ViewGroup) decorView.findViewById(android.R.id.content);
而且似乎
ViewGroup contentView = (ViewGroup) decorView.findViewById(android.R.id.content);
只是 NULL
...
代码在 oreo 之前的设备上工作,但 Crashlytics 说它在 android 8 台设备
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getAppComponent().inject(this);
binding = DataBindingUtil.setContentView(this, R.layout.main_activity);
}
堆栈跟踪
java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.ViewGroup.getChildCount()' on a null object reference
Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.ViewGroup.getChildCount()' on a null object reference
at android.databinding.DataBindingUtil.bindToAddedViews(DataBindingUtil.java:295)
at android.databinding.DataBindingUtil.setContentView(DataBindingUtil.java:279)
at android.databinding.DataBindingUtil.setContentView(DataBindingUtil.java:261)
at com.myapp.MyActivity.onCreate(MyActivity.java:59)
at android.app.Activity.performCreate(Activity.java:7174)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2910)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032)
at android.app.ActivityThread.-wrap11(Unknown Source)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6940)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
在 8 上使用完全相同的堆栈跟踪发生类似的崩溃。
您是否尝试过使用:
binding = DataBindingUtil.inflate(getLayoutInflater(), R.layout.activity, null, false);
setContentView(binding.getRoot());
上面代码和调用的区别
DataBindingUtil.setContentView(...);
就是inflate()
returns直接一个View
,后来传给DataBindingUtils::bindToAddedViews
。
在 DataBindingUtil.setContentView
的情况下,正在使用以下逻辑
activity.setContentView(layoutId);
View decorView = activity.getWindow().getDecorView();
ViewGroup contentView = (ViewGroup) decorView.findViewById(android.R.id.content);
而且似乎
ViewGroup contentView = (ViewGroup) decorView.findViewById(android.R.id.content);
只是 NULL
...