Получение java .util.NoSuchElementException при попытке выполнить GET для сервера. Ответ от сервера 204 / успех, но исключение все еще возникает - PullRequest
0 голосов
/ 10 февраля 2020

Я пытаюсь выяснить способ обработки 204 с нашего сервера при выполнении вызова GET. Мы используем RX Android, Moshi для анализа JSON и Retrofit для работы в сети. Наш сервер даст нам код состояния 204 в некоторых случаях, когда нет данных для возврата, а не пустой JSON массив / объект. В этом случае мы не можем использовать Completable, поскольку ожидаем данные в ответе. Похоже, это происходит потому, что мы пытаемся проанализировать пустой ответ.

В идеале мы хотели бы избежать исключения и продолжить обработку ответов.

Это исключение, которое мы видим в случае 204:

java.util.NoSuchElementException
        at io.reactivex.internal.operators.observable.ObservableSingleSingle$SingleElementObserver.onComplete(ObservableSingleSingle.java:113)
        at retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onComplete(BodyObservable.java:66)
        at retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:48)
        at io.reactivex.Observable.subscribe(Observable.java:12030)
        at retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)
        at io.reactivex.Observable.subscribe(Observable.java:12030)
        at io.reactivex.internal.operators.observable.ObservableSingleSingle.subscribeActual(ObservableSingleSingle.java:35)
        at io.reactivex.Single.subscribe(Single.java:3394)
        at io.reactivex.internal.operators.single.SingleTimeout.subscribeActual(SingleTimeout.java:53)
        at io.reactivex.Single.subscribe(Single.java:3394)
        at io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)
        at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:579)
        at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
        at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:764)
...