好吧,我一直在使用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的响应不是数组,是否有办法解决这个问题?
好吧,由于此评论,我可以解决问题:
@VeereshCharantimath确实是错误的原因:Firebase的JSON是地图(Map),而不是列表。愿意发布答案吗?–弗兰克·范普菲伦
在修改了响应的期望值之后,它开始工作:
改装Api呼叫
public interface ApiCalls {
@GET("/objects.json")
Observable<HashMap<String, MyObject>> getObjects();
}
RxJava的
rx.Observable<HashMap<String, MyObject>> call2 = api.getObjects();
call2.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<HashMap<String, 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(HashMap<String, MyObject> MyObjects) {
Log.d("onNext", "NextItem");
}
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句