Kotlin Moshi Загрузка Json из активов

Я пытаюсь загрузить файл активов Json в свой проект с помощью moshi. Однако я продолжаю получать следующую ошибку:

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)

Любая помощь будет принята с благодарностью!


person Erwin van den Berg    schedule 25.07.2019    source источник
comment
Вам не кажется, что в сообщении об ошибке есть подсказка?   -  person Bohdan Ivanov    schedule 25.07.2019
comment


Ответы (2)


Наконец-то мне удалось это исправить. Для всех будущих людей, которые могут оказаться в такой же ситуации, вот что я сделал:

Хотя json выглядит отлично, должно быть, была неправильная кодировка. Я загрузил json в jsoneditoronline, а затем снова экспортировал его. Загрузил, теперь код работает нормально.

Наконец, другие вещи, которые вы можете проверить для отладки;

  1. Файл актива открылся правильно?
  2. Зависимости правильные?
  3. Вы добавили .add(KotlinJsonAdapterFactory()) к объекту моши?
  4. Является ли listType - если применимо - правильным?
  5. И правильный ли класс данных?

Удачного кодирования (снова)!

person Erwin van den Berg    schedule 25.07.2019

Вам не нужен KotlinJsonAdapterFactory(), если вы используете создание аннотаций адаптера для классов данных.

person Alex Maryin    schedule 29.07.2021