【发布时间】:2015-09-27 13:43:02
【问题描述】:
之前有人问过类似的问题。但他们都没有为我工作。 我正在尝试返回一个订阅者正在收听的 observable。 每次使用 "java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $" 调用订阅者的 onError() 方法时都会出现此错误。
这是我的代码:
public Observable<List<String>> getPlaces() {
Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.baseUrl(Urls.BASE_URL)
.build();
RetroFitInterface service = retrofit.create(RetroFitInterface.class);
return service.getPlaces();
}
public interface RetroFitInterface {
@Headers({
"Accept: application/json",
"Content-Type: application/json"
})
@GET(Urls.GET_POPULAR_LOCATIONS_URL)
Observable<List<String>> getPlaces();
}
这是一个 JSON 响应:
{
"locations": [
"location1",
"location2",
"location3",
"location4",
"location5",
"location6",
"location7",
],
"success": true
}
这就是我订阅订阅者的方式。
getPlaces().subscribeOn(Schedulers.io())
.subscribe(new Observer<List<String>>() {
@Override
public void onCompleted() {
Log.d(TAG, "Search result onCompleted()!");
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "Search result onError()! " + e.toString());
}
@Override
public void onNext(final List<String> result) {
Log.d(TAG, "This is never called.");
}
})
【问题讨论】:
-
List
但响应是包含 json 数组的 json 对象。我认为您需要使用 pojo 模式。使用 GSON 从 json 到对象数组列表映射。如果你没有明白我的意思,请告诉我。 -
你知道json基础吗?不!学习它,例外就会很明显。
-
@BhavdipPathar 你的帮助会更好。
-
请贴出
RetroFitInterface的代码。 -
@CommonsWare 它已经存在了
标签: android json gson retrofit observable