【发布时间】: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 工作一无所知