未解决的参考: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 '<init>': it is package-private in 'TypeToken'
。你能确认你得到了什么错误吗?
@MayurGajra 是的,我在编译这段代码时也遇到了这个错误。但是我怎样才能得到这个包呢?
这不完全是您问题的答案,但是在 Kotlin 中您不需要使用 TypeToken
来获取类型,因为 Kotlin 在其标准库中内置了这样的 util:val myType = typeOf<List<QuizType>>().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的主要内容,如果未能解决你的问题,请参考以下文章