提问者:小点点

如何解决kotlin类型强制转换异常:null不能强制转换为null kotlin.Collections.ArrayList


我是Kotlin的新手,无法解决这个例外,我尝试了不同的解决方案,从网上。 我正在从api中获取数据列表,并希望通过数据绑定将其分配给旋转器,但当我将其分配给api调用的成功块中的可变arraylist时,代码崩溃了。

这是我的列表声明

private val _operators: MutableLiveData<ArrayList<Networks>>? = NotNullMutableLiveData(arrayListOf())
val operators: MutableLiveData<ArrayList<Networks>>? get() = _operators

Api调用

fun getShops() {
    addToDisposable(api.getShoppingList().with()
        .doOnSubscribe {}
        .doOnSuccess {}
        .doOnError {}
        .subscribe({ result ->
             // getting crash here 
             _operators?.value = result.Data.get(0).items as 
                 ArrayList<Networks>
           
 
        }, { error ->
        })
    )
  }

撞车

     Caused by: kotlin.TypeCastException: null cannot be cast to non-null type kotlin.collections.ArrayList<com.tapmad.apis.viewModels.MobileNetworks> /* = java.util.ArrayList<com.tapmad.apis.viewModels.MobileNetworks> */
    at com.tapmad.apis.models.SubscriptionViewModel$getAllPaymentNetworks$4.accept(SubscriptionViewModel.kt:110)
    at com.tapmad.apis.models.SubscriptionViewModel$getAllPaymentNetworks$4.accept(SubscriptionViewModel.kt:18)
    at io.reactivex.internal.observers.ConsumerSingleObserver.onSuccess(ConsumerSingleObserver.java:63)
    at io.reactivex.internal.operators.single.SingleDoOnError$DoOnError.onSuccess(SingleDoOnError.java:52) 
    at io.reactivex.internal.operators.single.SingleDoOnSuccess$DoOnSuccess.onSuccess(SingleDoOnSuccess.java:59) 
    at io.reactivex.internal.operators.single.SingleDoOnSubscribe$DoOnSubscribeSingleObserver.onSuccess(SingleDoOnSubscribe.java:77) 
    at io.reactivex.internal.operators.single.SingleObserveOn$ObserveOnSingleObserver.run(SingleObserveOn.java:81) 
    at io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:109) 
    at android.os.Handler.handleCallback(Handler.java:751) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.app.ActivityThread.main(ActivityThread.java:6123) 

共1个答案

匿名用户

您的MobileNetworks列表是NULL以避免NPE添加操作符以检查可为空

 _operators?.value = result.PaymentMethods.get(0).mobileNetworks as 
                 ArrayList<MobileNetworks>?