当我尝试使用单个可观察对象时,为什么无法观察到工作
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();
来轻松修复它
希望对您有所帮助!!
快乐编码:)
我对可观察的单个对象和对象列表有点困惑
当我使用 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();
希望对您有所帮助!!
快乐编码:)