Как разобрать массив json с помощью Retrofit и RxJava - PullRequest
0 голосов
/ 07 января 2019

У меня проблема с анализом массива объектов при помощи 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 голосов
/ 21 января 2019

Несколько нот

Прежде всего, вам может понадобиться показать нам, как вы звоните 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

Кроме этого, без кода того, как вы его называете, мы не сможем вам помочь в подробном виде.

0 голосов
/ 08 января 2019

Попробуйте использовать RxJava2 Адаптер

Интеграция

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();
...