Android onAdLoaded&;后PublisherdView变为空;onAdFailed
守则:Android onAdLoaded&;后PublisherdView变为空;onAdFailed,android,kotlin,google-play-services,synthetic,Android,Kotlin,Google Play Services,Synthetic,守则: private fun initAds() { val adRequest = PublisherAdRequest.Builder().build() pavDetail.loadAd(adRequest) pavDetail.adListener = object : AdListener() { override fun onAdLoaded() { super.onAdLoaded() pav
private fun initAds() {
val adRequest = PublisherAdRequest.Builder().build()
pavDetail.loadAd(adRequest)
pavDetail.adListener = object : AdListener() {
override fun onAdLoaded() {
super.onAdLoaded()
pavDetail.visibility = View.VISIBLE
}
override fun onAdFailedToLoad(i: Int) {
pavDetail.visibility = View.GONE
super.onAdFailedToLoad(i)
}
}
}
pavdail
是com.google.android.gms.ads.doubleclick.PublisherAdView
,我是通过kotlinx从XML版面合成得到的
此代码有时会抛出IllegalStateException
,因为pavDetail
在OnadaLoaded
和OnadaFailedToLoad
中神秘地变为null
我设置了pavdail?.visibility
以防止崩溃,但我不确定这是否有效,因为我怀疑调用pavdail
本身可能引发该异常。请记住,这不是NullPointerException
这是一个IllegalStateException
发出消息pavDetail不能为null
因此,我问为什么
pavdail
变为空,以及如何防止崩溃。是否在ViewHolder
的onChanged
方法调用的initAds
方法中使用它,如果没有数据。如果有数据,它将被片段中创建的活动调用
您的ViewHolder
是否实现layoutcainer
?很抱歉,我将ViewHolder
视为ViewModel
,混淆了您的问题。此代码位于片段
中,该片段是ViewPager
项,因此它不使用ViewHolder
。因此,如果LiveData
中没有数据,onChanged
方法调用initAds
方法。如果有数据,则直接由ActivityCreated上的调用。