Kotlinコルーチンを使用してJSON配列のMoshiライブラリを使用して解析を試みています。
コードの使用
fun retrofitIndia(baseUrl : String) : Retrofit = Retrofit.Builder()
.client(clientIndia)
.baseUrl(baseUrl)
.addConverterFactory(MoshiConverterFactory.create())
.addCallAdapterFactory(CoroutineCallAdapterFactory())
.build()
JSON Arrayのデータクラスの解析中に問題が発生します。私は同じようにJSONオブジェクトを使用しましたが、正常に動作しますが、配列中にクラッシュします以下はクラッシュ行です
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)
}
}
タイプはList<T>
だけにする必要があります。Moshiはコレクションインターフェースのみをサポートし、ArrayList<T>
、LinkedList<T>
などの具象コレクションクラスはサポートしません。他の種類のコレクションについても同様です。 Set<T>
の代わりにHashSet<T>
、Map<K, V>
の代わりにHashMap<K, V>
など.
コルーチンには構文解析エラーがあるとは思わないので、以下を試してください Moshiを使用してJsonリストを読み取る
クイックスニペットは次のようになります。
// 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)