androidx数据绑定生命周期NullPointerException
我似乎找不到此androidx数据绑定生命周期NullPointerException,android,nullpointerexception,android-livedata,android-architecture-navigation,Android,Nullpointerexception,Android Livedata,Android Architecture Navigation,我似乎找不到此数据绑定的来源NullPointerException。当使用Android导航架构导航到片段并重复向上导航时,我最终会得到以下堆栈跟踪 java.lang.NullPointerException: Attempt to invoke direct method 'void androidx.databinding.ViewDataBinding.handleFieldChange(int, java.lang.Object, int)' on a null object ref
数据绑定的来源NullPointerException
。当使用Android导航架构
导航到片段
并重复向上导航时,我最终会得到以下堆栈跟踪
java.lang.NullPointerException: Attempt to invoke direct method 'void androidx.databinding.ViewDataBinding.handleFieldChange(int, java.lang.Object, int)' on a null object reference
at androidx.databinding.ViewDataBinding.access$800(ViewDataBinding.java:64)
at androidx.databinding.ViewDataBinding$LiveDataListener.onChanged(ViewDataBinding.java:1592)
at androidx.lifecycle.LiveData.considerNotify(LiveData.java:113)
at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java:126)
at androidx.lifecycle.LiveData$ObserverWrapper.activeStateChanged(LiveData.java:424)
at androidx.lifecycle.LiveData$LifecycleBoundObserver.onStateChanged(LiveData.java:376)
at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.java:355)
at androidx.lifecycle.LifecycleRegistry.forwardPass(LifecycleRegistry.java:293)
at androidx.lifecycle.LifecycleRegistry.sync(LifecycleRegistry.java:333)
at androidx.lifecycle.LifecycleRegistry.moveToState(LifecycleRegistry.java:138)
at androidx.lifecycle.LifecycleRegistry.handleLifecycleEvent(LifecycleRegistry.java:124)
at androidx.fragment.app.Fragment.performStart(Fragment.java:2485)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1494)
at androidx.fragment.app.FragmentManagerImpl.addAddedFragments(FragmentManager.java:2646)
at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2416)
at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2372)
at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
at androidx.fragment.app.FragmentManagerImpl$1.run(FragmentManager.java:733)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6938)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
它似乎与异常中所述的LiveData
生命周期有关。我猜onPause
出于内存的考虑,ViewModel
中的LiveData
对象被清除,然后出于某种原因再次被访问
这似乎是非常随机的,因为它发生在我们所有的片段上,但只有在不断导航到特定片段或在应用程序中的不同片段之间时才会发生。暂停/销毁片段后,我们不会尝试访问LiveData
对象。我找不到任何以前有过这个问题的人,发现很难找到问题的根源 今天早上我遇到了同样的问题,很高兴看到我不是唯一一个
我想我已经为自己解决了这个问题,尽管你会知道这有点难以确定。对我来说,在viewPager中的片段之间进行分页时,有时会出现错误。我相信这些片段在屏幕外时会分离,但数据绑定更新仍在调用中。我通过将viewPager的offscreenPageLimit设置为0来确认这一点,并且我开始得到更一致的错误
我的解决方案是替换:
binding.setLifecycleOwner(this);
与:
见:
获取表示片段的视图生命周期的LifecycleOwner。在大多数情况下,这反映了片段本身的生命周期,但在分离片段的情况下,片段的生命周期可能比视图本身的生命周期长得多
自从我自己做了这个更改之后,我再也没有遇到过这个错误,所以请让我知道这是否为您解决了这个问题。如果我最终再次出现错误,我将更新我的答案,但到目前为止,我相信这已经解决了我的问题。谢谢!我为此损失了整整一天,解决办法似乎已经解决了。有趣的是,在我的搜索中,我实际上在开发者文档中找到了答案,但因为我的大脑太兴奋了,我连想都没想就看了一遍。你真的让我很开心,sirWell男孩,我很高兴我发布了这个答案,只是又出现了这个问题,完全掩盖了问题的原因。在我意识到之前,请通读整个问题。在将lifecycle owner设置为viewLifeCycleOwner之后,崩溃仍然会发生。当你长时间(约5分钟)坐在屏幕上时也会发生这种情况,而不仅仅是在导航回来的时候,forthI认为它可能已经解决了:。@JulioE.RodríguezCabañas看起来实际上已经解决了,我从昨天升级到3.4.1以来就没有遇到过这个问题。我还有这个问题:(
binding.setLifecycleOwner(getViewLifecycleOwner());