Разбор jsonrray в объект с помощью moshi с Retrofit и Kotlin - PullRequest
4 голосов
/ 04 апреля 2020

Я пытаюсь выполнить синтаксический анализ библиотеки Moshi для JSON Массив с помощью Kotlin Сопрограммы.

Использование кода

 fun retrofitIndia(baseUrl : String) : Retrofit = Retrofit.Builder()
        .client(clientIndia)
        .baseUrl(baseUrl)
        .addConverterFactory(MoshiConverterFactory.create())
        .addCallAdapterFactory(CoroutineCallAdapterFactory())
        .build()

При синтаксическом анализе класса данных для * 1015 возникает проблема * Массив. Я использовал то же самое для JSON Объекта, и он работает нормально, но во время массива он падает. Ниже показана строка cra sh

java.lang.IllegalArgumentException: Unable to create converter for java.util.ArrayList<data.india.Delta2>

. Я вызываю из сопрограммы Globallaunch, где происходит сбой

Код:

 GlobalScope.launch(Dispatchers.Main) {
            val statsRequest = i.getStats()
            try {
                val response = statsRequest.await()
               if(response.){
                    val statsResponse = response.body() //This is single object Tmdb Movie response


                    Log.i("stats",""+statsResponse)
                }else{
                    Log.d("MainActivity ",response.errorBody().toString())
                }
            }catch (e: Exception){
                Log.e("Exception",e.localizedMessage)
            }
        }

Ответы [ 2 ]

0 голосов
/ 10 апреля 2020

Не думаю, что у сопрограмм есть что-то с ошибкой синтаксического анализа, попробуйте выполнить Чтение Json списков с помощью Moshi

Быстрый фрагмент будет выглядеть примерно так:

// Single item declaration 
class SingleListItem(val title: String, val number: Int)

private var listMyData = Types.newParameterizedType(MutableList::class.java, SingleListItem::class.java)
private val adapter: JsonAdapter<List<SingleListItem>> = Moshi.Builder().add(KotlinJsonAdapterFactory()).build().adapter(listMyData)
0 голосов
/ 09 апреля 2020

Вы должны сделать тип просто List<T>, Moshi поддерживает только интерфейсы коллекций, а не конкретные классы коллекций, такие как ArrayList<T>, LinkedList<T>, et c. То же самое относится и к другим типам коллекций: используйте Set<T> вместо HashSet<T> и Map<K, V> вместо HashMap<K, V>, et c ..

...