首页 > 解决方案 > kotlin.TypeCastException: null 不能转换为非 null 类型 com.example.wikipedia.models.WikiResult

问题描述

每次我尝试运行我的 Wikipedia 应用程序时都会发现此错误

kotlin.TypeCastException: null cannot be cast to non-null type com.example.wikipedia.models.WikiResult
        at com.example.wikipedia.providers.ArticleDataProvider$getRandom$1.invoke(ArticleDataProvider.kt:38)
        at com.example.wikipedia.providers.ArticleDataProvider$getRandom$1.invoke(ArticleDataProvider.kt:13)
        at com.github.kittinunf.fuel.core.DeserializableKt$response$2.invoke(Deserializable.kt:106)
        at com.github.kittinunf.fuel.core.DeserializableKt$response$2.invoke(Unknown Source:6)
        at com.github.kittinunf.fuel.core.DeserializableKt$response$asyncRequest$1$1.invoke(Deserializable.kt:193)
        at com.github.kittinunf.fuel.core.DeserializableKt$response$asyncRequest$1$1.invoke(Unknown Source:0)

我的 ArticleProvider.kt 看起来像这样

package com.example.wikipedia.providers

import com.example.wikipedia.models.Urls
import com.example.wikipedia.models.WikiResult
import com.github.kittinunf.fuel.core.FuelManager
import com.github.kittinunf.fuel.core.ResponseDeserializable
import com.github.kittinunf.fuel.httpGet
import com.google.gson.Gson
import kotlinx.android.parcel.Parcelize
import java.io.Reader
import kotlinx.android.synthetic.main.activity_main.*

class ArticleDataProvider {

    init {
        FuelManager.instance.baseHeaders= mapOf("User-Agent" to "Jackson Wikipedia")
    }

    fun search (term: String, skip: Int, take: Int, responseHandler: (result: WikiResult) -> Unit?){
        Urls.getSearchUrl(term, skip, take).httpGet()
            .responseObject(WikipediaDataDeserializer()){_, _,result ->
                val(data, _)= result
                responseHandler.invoke(data as WikiResult)// here is the problem line 38
            }
    }

    fun getRandom(take: Int, responseHandler: (result: WikiResult) -> Unit?){
        Urls.getRandomUrl(take).httpGet()
            .responseObject(WikipediaDataDeserializer()){_, _, result->
                val(data, _)= result
                responseHandler.invoke(data as WikiResult)

            }
    }

    class WikipediaDataDeserializer : ResponseDeserializable<WikiResult> {
        override fun deserialize(reader: Reader): WikiResult? {
            return Gson().fromJson(reader, WikiResult::class.java)}

    }
}

标签: androidkotlin

解决方案


推荐阅读