当我调用我的视图模型时,它说我的参数返回为空,即使API调用工作,所以我想知道错误是否发生在我的视图模型中?
我的视图模型
class HomeFragmentVM(
private val spManager: SPManager,
private val repository: Repository
) : AbstractViewModel() {
private val washingMachine = MutableLiveData<Post>()
fun getWashingMachines() {
launch {
repository.getPost()
.doOnSubscribe {
}
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
washingMachine.value = it
spManager.saveTitleID(it.title)
}, {
})
}
}
}
调试日志:
java.lang.NullPointerException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkNotNullParameter, parameter title
at com.invenium.jlp_android_test.utils.SPManager.saveTitleID(Unknown Source:2)
at com.invenium.jlp_android_test.functionalities.Home.HomeFragmentVM$getWashingMachines$1.invoke$lambda-1(HomeFragmentVM.kt:32)
at com.invenium.jlp_android_test.functionalities.Home.HomeFragmentVM$getWashingMachines$1.lambda$UfyFFA37mNg1-E8x0CGZ3EyBoEY(Unknown Source:0)
at com.invenium.jlp_android_test.functionalities.Home.-$$Lambda$HomeFragmentVM$getWashingMachines$1$UfyFFA37mNg1-E8x0CGZ3EyBoEY.accept(Unknown Source:4)
at io.reactivex.internal.observers.ConsumerSingleObserver.onSuccess(ConsumerSingleObserver.java:63)
at io.reactivex.internal.operators.single.SingleObserveOn$ObserveOnSingleObserver.run(SingleObserveOn.java:81)
at io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:119)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
型号:
data class Post(
@SerializedName("products")
var data: List<Data>,
@SerializedName("productId")
var productid: Int,
@SerializedName("title")
var title: String
)
由于一些模型尚未使用,该模型已被稍微缩短。
3条答案
按热度按时间k4ymrczo1#
按如下方式设置标题的默认值:
之后,如果问题解决了,请检查title返回null的原因
ddhy6vgd2#
问题是
title
属性被定义为不可为空,但(显然)为空或在JSON中不存在。除此之外,应用程序崩溃的原因是Kotlin编译器进行的检查。你可以在堆栈跟踪中看到:
这是因为Gson(我假设您使用它,因为您有
@SerializedName
注解)使用Java反射并忽略了Kotlin类型的可空性,因此即使Kotlin属性被定义为不可空,它也会将字段赋为null。要解决崩溃问题,您必须将属性定义为可空:
这样,编译器将强制您在将
title
传递到saveTitleID
之前添加一个空检查。4ioopgfo3#
尝试在模型中使标题为空