如何使用Retrofit和RxJava解析JSON数组

时间:2019-01-07 19:46:38

标签: kotlin retrofit2 rx-java2

我在使用Retrofit + RxJava解析对象数组时遇到问题

JSON仅包含此数组

{
    "files": [
        {
            "id": 10,
            "notificationId": 15,
            "name": "cats.ncs",
            "dateTime": "2019-01-07T17:34:45"
        }
    ]
}

翻新服务

@GET("/api/FileApi/files")
fun files(): Observable<FilesResponse>

FilesResponse在哪里

data class FilesResponse(
    @SerializedName("files")
    var files: List<FileElement>
)

和FileElement

data class FileElement(
    @SerializedName("id")
    var id: Long,
    @SerializedName("notificationId")
    var notificationId: Long,
    @SerializedName("name")
    var name: String,
    @SerializedName("dateTime")
    var dateTime: String
)

当我运行它时,我总是得到

  

CallObjectMethodA的返回类型不匹配   io.reactivex.Observable ApiService.files()

那么如何解析仅包含数组的JSON?

2 个答案:

答案 0 :(得分:1)

尝试使用RxJava2 Adapter

集成

implementation 'com.squareup.retrofit2:adapter-rxjava2:{retrofit_version}'

改造客户端设置

new Retrofit.Builder()
  .baseUrl(BASE_URL)
  .addConverterFactory(GsonConverterFactory.create())
  .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) //option 1
  .addCallAdapterFactory(RxJava2CallAdapterFactory.createWithScheduler(Schedulers.newThread())) //option 2
  .build();

答案 1 :(得分:0)

少量笔记

首先,您可能需要向我们展示如何致电ApiService.files()

可能出了什么问题

它的命名方式

可能是什么解决方案

调用这样的方法

ApiService
        .files()
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe({
            // Handle the values here
        },{
            // Handle the error here
        },{
            // Handle the completion here (optional)
        })

不是这样

ApiServices.files()

也不

var fileResponse = ApiServices.files()

确保如上所述,您已经正确设置了改造构建器

  • RxJava2CallAdapterFactory
  • GsonConverterFactory

除此之外,如果没有如何调用的代码,我们将无法为您提供深入的帮助。