android — Сбой приложения при использовании привязки данных Android на Android 8" />

Сбой приложения при использовании привязки данных Android на 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: попытка вызвать виртуальный метод '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)
7 голосов | спросил Farrux Bahodirov 27 PMpFri, 27 Apr 2018 13:40:33 +030040Friday 2018, 13:40:33

1 ответ


0

Имейте схожие сбои с точно такой же трассировкой стека на 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 ...

ответил pelotasplus 4 Maypm18 2018, 18:51:57

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132