【问题标题】:Unresolved reference: TypeToken未解决的参考: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 工作一无所知

标签: android json kotlin gson


【解决方案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()”"
  • @Вікторія.Палихата 您能否更新您尝试过的新代码? & 我还要求您在问题中添加所有导入语句?
  • 也许您安装了一些有助于使用它的插件或其他东西?
猜你喜欢
  • 1970-01-01
  • 2019-04-05
  • 1970-01-01
  • 2016-12-14
  • 2020-05-27
  • 2019-11-16
  • 2021-01-24
  • 2023-03-25
  • 2021-08-13
相关资源
最近更新 更多