【问题标题】:Kotlin Moshi Load Json from assetsKotlin Moshi 从资产中加载 Json
【发布时间】:2019-12-03 18:38:00
【问题描述】:

我正在尝试使用 moshi 将资产 Json 文件加载到我的项目中。但是,我不断收到以下错误:

com.squareup.moshi.JsonEncodingException:使用 JsonReader.setLenient(true) 在路径 $ 处接受格式错误的 JSON

我应该如何将以下 Json 加载到我的项目中?

json_file.json

[
  {
    "Name": "Show title",
    "Description": "desc",
    "Artwork": "link",
    "URL": "feed url"
  },
  {
    "Name": "Show title",
    "Description": "desc",
    "Artwork": "link",
    "URL": "feed url"
  }
]

这就是我所做的:

JsonUtil

object JsonUtil {

    fun getAssetPodcasts(context: Context): List<JsonPodcast>? {
        val moshi = Moshi.Builder()
            .add(KotlinJsonAdapterFactory())
            .build()

        val listType = Types.newParameterizedType(List::class.java, JsonPodcast::class.java)
        val adapter: JsonAdapter<List<JsonPodcast>> = moshi.adapter(listType)

        val file = "json_file.json"

        val myjson = context.assets.open(file).bufferedReader().use{ it.readText()}

        return adapter.fromJson(myjson)
    }

    @JsonClass(generateAdapter = true)
    data class JsonPodcast(
        val Name: String,
        val Description: String,
        val Artwork: String,
        val URL: String
    )
}

我的活动

getAssetPodcasts(this)

任何帮助将不胜感激!

【问题讨论】:

  • 你不认为错误信息中有线索吗?
  • 我知道,但是将我的代码与moshi guide 进行比较,我看不出我做错了什么。我不知道如何进行

标签: json kotlin android-assets moshi


【解决方案1】:

如果您为数据类使用生成适配器注释,则不需要 KotlinJsonAdapterFactory()。

【讨论】:

    【解决方案2】:

    我终于设法修复它。对于任何可能发现自己处于相同情况的未来人,这就是我所做的:

    虽然 json 看起来非常好,但肯定是编码错误。我将json上传到jsoneditoronline,然后再次导出。加载它,现在代码可以正常工作了。

    最后,您可以检查以进行调试的其他内容;

    1. 资产文件是否正确打开?
    2. 依赖关系是否正确?
    3. 您是否将.add(KotlinJsonAdapterFactory()) 添加到moshi 对象?
    4. listType - 如果适用 - 是否正确?
    5. 数据类是否正确?

    编码愉快(再次)!

    【讨论】:

      猜你喜欢
      • 2019-11-20
      • 2014-07-08
      • 2019-08-02
      • 2017-06-06
      • 2014-03-09
      • 2018-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多