Почему не наблюдаемая работа, когда я пытаюсь с одной наблюдаемой - PullRequest
0 голосов
/ 09 октября 2019

Я немного растерялся из-за наблюдаемого отдельного объекта и списка объектов

, когда я делаю следующее с Observable>, тогда он работает

модифицированный интерфейс MainApi:

    Observable<Todo> getTodos();

в действии:

    mainApi.getTodos()
    .subscribeOn(Schedulers.io())
            .concatMap(new Function<List<Todo>, ObservableSource<Todo>>() {
                @Override
                public ObservableSource<Todo> apply(List<Todo> todos) throws Exception {
                      return Observable.fromIterable(todos).subscribeOn(Schedulers.io());
                }
            })
            .subscribe(new Observer<Todo>() {
                @Override
                public void onSubscribe(Disposable d) {
                    Log.d("LogMe", ">>>Inside susbcribed>>>");
                }

                @Override
                public void onNext(Todo todo) {
                    Log.d("LogMe", ">>>Inside onNExt>>>" +  todo.getName());

                }

                @Override
                public void onError(Throwable e) {
                    Log.d("LogMe", ">>>Inside onError>>>" +e.toString());
                }

                @Override
                public void onComplete() {
                    Log.d("LogMe", ">>>Inside onComplete>>>");
                }
            });

Но при использовании Observable он не работает.

дооснащение интерфейса MainApi:

    Observable<Todo> getTodos();

в действии:

    mainApi.getTodos().subscribeOn(Schedulers.io())
        .map(new Function<Todo, String>() {

            @Override
            public  String apply(Todo todo) throws Exception {
            return todo.getName();
            }
        })
        .doOnNext(new Consumer<String>() {
            @Override
            public void accept(String stringObservable) throws Exception {
            Log.d("LogMe", ">>>Inside >>> doOnNext");
            }
        })
    .subscribe(new Observer<String>() {
               @Override
               public void onSubscribe(Disposable d) {
               Log.d("LogMe", ">>>Inside susbcribed>>>");
               }

               @Override
               public void onNext(String stringObservable) {
               Log.d("LogMe", ">>>Inside onNExt>>>");
               }

               @Override
               public void onError(Throwable e) {
               Log.d("LogMe", ">>>Inside onError>>>" +e.toString());
               }

               @Override
               public void onComplete() {
               Log.d("LogMe", ">>>Inside Presenter onComplete>>>");
               }
           });

, тогда я получаю сообщение об ошибке:

LogMe: >>> Inside Presenter onError >>> com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: ожидаемый BEGIN_OBJECT, но был BEGIN_ARRAY в строке 1, путь 2 столбца $

Куда я иду не так? Если возможно получить результат с помощью одной наблюдаемой, то как мне пройти через каждый элемент / объект Todo?

1 Ответ

0 голосов
/ 09 октября 2019

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: ожидалось BEGIN_OBJECT, но было BEGIN_ARRAY в пути строки 1 столбца 2

Ошибка из библиотеки Gson.

Почему эта ошибка, что означает эта ошибка?

Эта ошибка просто означает, что Gson не может десериализовать JSON в объект Java. потому что Gson ожидает объект JSON и неожиданно получил массив JSON из ответа.

Как это исправить?

Вы можете легко это исправить, изменив тип возврата Observable<Todo> getTodos(); на Observable<List<Todo>> getTodos();

Надеюсь, это поможет!!

Happy Coding:)

...