コードはpre-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:nullオブジェクト参照で仮想メソッド 'int Android.view.ViewGroup.getChildCount()'を呼び出そうとしました
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()
は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
..です。