【发布时间】:2017-04-07 01:08:36
【问题描述】:
嗯,我一直在为使用 REST API 响应的 Firebase 响应而苦苦挣扎。问题是我不想将 Android 的库用于 Firebase,而是使用原始的 rest api。长话短说,Firebase 的回应是:
{
"object1": {
"param1": true,
"param2": "05",
"param3": "String",
},
"object2": {
"param1": true,
"param2": "09",
"param3": "String",
}
}
改造界面:
public interface ApiCalls {
@GET("/objects.json")
Observable<List<MyObject>> getObjects();
}
Gson Builder、Retrofit Builder 和 RxJava:
Gson gson = new GsonBuilder()
.setLenient()
.create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://my-service.firebaseio.com")
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create(gson))
.client(okHttpClient)
.build();
ApiCalls api = retrofit.create(ApiCalls.class);
rx.Observable<List<MyObject>> call2 = api.getObjects();
call2.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<List<MyObject>>() {
@Override
public void onCompleted() {
Log.d("onCompleted", "Its completed");
}
@Override
public void onError(Throwable e) {
Log.d("onError", e.getMessage());
}
@Override
public void onNext(List<MyObject> MyObjects) {
Log.d("onNext", "NextItem");
}
});
执行此操作时,我收到错误:
java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
有没有办法使用 RxJava 来解决这个问题,以便迭代来自服务器的对象列表?从现在开始我期待一个数组,但firebase的响应不是一个数组,有没有办法解决这个问题?
【问题讨论】:
-
传入 JSON 的根元素不是数组,而是对象
-
尝试使用 - Observable
-
发布您的 JSON ......
-
这个问题与 RxJava 无关,您发布的消息说您正在尝试将 jsonObject 结构反序列化为 JsonArray。
-
@VeereshCharantimath 这确实是错误的原因:来自 Firebase 的 JSON 是地图 (
Map<String,Object>),而不是列表。愿意发布答案吗?
标签: android rest firebase retrofit rx-android