当我尝试使用单个可观察对象时,为什么无法观察到工作

Why isnt observable working when I am trying with single observable

我对可观察的单个对象和对象列表有点困惑

当我使用 Observable> 执行以下操作时,它就起作用了

改造接口MainApi:

    Observable<Todo> getTodos();

在activity:

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

在activity:

    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 但在第 1 行第 2 列路径 $

我哪里错了?如果可以通过单个 observable 获得结果,那么我如何遍历 Todo 的每个 item/object?

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path

错误来自 Gson 库。

Why this Error, What this error means?

此错误仅表示 Gson 无法将 JSON 反序列化为 Java 对象。 因为 Gson 期待一个 JSON 对象并且意外地从响应中收到了一个 JSON 数组。

How to Fix it?

您可以通过将 Observable<Todo> getTodos(); 的 return 类型更改为 Observable<List<Todo>> getTodos();

来轻松修复它

希望对您有所帮助!!

快乐编码:)