我对可观察的单个对象和对象列表感到困惑
当我对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:>>>内部演示者onError >>> com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为BEGIN_OBJECT,但在第1行第2列路径$ BEGIN_ARRAY中>
我要去哪里错了?如果可以通过单个观察得到结果,那我该如何遍历Todo的每个项目/对象?
答案 0 :(得分:0)
com.google.gson.JsonSyntaxException:java.lang.IllegalStateException: 预期为BEGIN_OBJECT,但位于第1行第2列路径的BEGIN_ARRAY
错误来自Gson
库。
为什么会出现此错误,该错误是什么意思?
此错误仅表示Gson无法将JSON反序列化为Java Object。 因为Gson期望使用JSON对象,并且意外地从响应中接收到JSON数组。
如何解决?
您可以通过将Observable<Todo> getTodos();
的返回类型更改为Observable<List<Todo>> getTodos();
希望这会有所帮助!!
快乐编码:)