當我呼叫我的視圖模型時,它說我的引數回傳為空,即使 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
)
該模型已被縮短為一些尚未使用的模型。
uj5u.com熱心網友回復:
像這樣設定標題的默認值:
- @SerializedName("title") var title: String = ""
之后,如果你的問題解決了,檢查為什么title回傳null
uj5u.com熱心網友回復:
問題是該title屬性被定義為不可為空,但(顯然)為空或 JSON 中不存在。
除此之外,由于 Kotlin 編譯器的檢查,應用程式正在崩潰。您可以在堆疊跟蹤中看到它:
method kotlin.jvm.internal.Intrinsics.checkNotNullParameter
這是因為 Gson(我假設您正在使用它,因為您有@SerializedName注釋)使用 Java 反射并忽略 Kotlin 型別的可空性,因此即使 Kotlin 屬性被定義為不可為空,它也會將該欄位分配為 null .
要解決崩潰,您必須將您的屬性定義為可為空的:
var title: String?
這樣,編譯器將強制您在傳遞title給saveTitleID.
uj5u.com熱心網友回復:
嘗試在模型中為空標題
data class Post(
@SerializedName("products")
var data: List<Data>,
@SerializedName("productId")
var productid: Int,
@SerializedName("title")
var title: String? = null
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/510558.html
上一篇:由于精度問題而導致錯誤答案?
