未解决的参考:TypeToken

Posted

技术标签:

【中文标题】未解决的参考:TypeToken【英文标题】:Unresolved reference: TypeToken 【发布时间】:2021-08-17 23:29:43 【问题描述】:

我是第一次使用 JSON,但遇到了问题。当我尝试使用和导入 TypeToken 时,我收到错误“Unresolved reference: TypeToken”。

我的代码

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

import com.google.gson.Gson
import java.lang.reflect.Type
import com.google.gson.reflect.TypeToken

class QuizActivity : AppCompatActivity() 

    override fun onCreate(savedInstanceState: Bundle?) 
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_quiz)

        val gson = Gson()

        val json = "quiz.json"
        val myType: Type = object : TypeToken<List<QuizType>>().type()
        val quiz: List<QuizType> = gson.fromJson(json, myType)

    

怎么了?


已编辑

我会用这个

val myType = typeOf<List<QuizType>>().javaType

改为

val myType: Type = object : TypeToken<List<QuizType>>().type()

而且它有效! (或者我会尝试 Moshi)

【问题讨论】:

使用您的代码,我没有收到“未解决的引用错误”,但是当我将鼠标悬停在 TypeToken 上时,我收到了 Cannot access '&lt;init&gt;': it is package-private in 'TypeToken'。你能确认你得到了什么错误吗? @MayurGajra 是的,我在编译这段代码时也遇到了这个错误。但是我怎样才能得到这个包呢? 这不完全是您问题的答案,但是在 Kotlin 中您不需要使用 TypeToken 来获取类型,因为 Kotlin 在其标准库中内置了这样的 util:val myType = typeOf&lt;List&lt;QuizType&gt;&gt;().javaType .目前它仍处于实验状态,但它已经存在了很长时间并且似乎没有改变。 您为什么选择(过时的)GSON 而不是 kotlinx.serialization 或 moshi? @Павел 我只是学习,对 JSON 工作一无所知 【参考方案1】:

TypeToken 的声明存在问题。您在前面缺少object :。因为它应该是匿名内部类。

应该是这样的:

val gson = Gson()
val json = "quiz.json"
val myType: Type = object : TypeToken<List<QuizType>>() .type
val quiz: List<QuizType> = gson.fromJson(json, myType)   

  

【讨论】:

我仍然有这个错误并得到另一个“类型'类型的表达式'类型'!无法作为函数调用。找不到函数“invoke()”" @Вікторія.Палихата 你遇到了什么错误? "类型 'Type!' 的表达式 'type'无法作为函数调用。找不到函数“invoke()”" @Вікторія.Палихата 您能否更新您尝试过的新代码? & 我还要求您在问题中添加所有导入语句? 也许您安装了一些有助于使用它的插件或其他东西?

以上是关于未解决的参考:TypeToken的主要内容,如果未能解决你的问题,请参考以下文章

Gson通过借助TypeToken类来解决这个问题

未解决的参考:mockwebserver

未解决的参考:等待。 Kotlin 协程

未解决的参考 DaggerApplicationComponent

未解决的参考:FlutterActivity

未解决的参考:测试