我一直在努力使用REST API响应处理Firebase响应。问题是我不想在Firebase中使用Android的libs,而是使用原始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、改装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),而不是列表。想发布答案吗?-Frank van Puffelen
在我修改了响应的预期值后,它开始工作:
改装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");
}
});
根据这篇博文,我读过更好的方法是用parcelable而不是seralisable解析http://blog.robinchutaux.com/blog/a-smart-way-to-use-retrofit/ 但是如何使用Parceler库(https://github.com/johncarl81/parceler)自定义解析? 在GSON库中,我们可以这样做: 并像这样配置GsonBuild
我有Byte Buddy作为代理运行,它成功地拦截了我的绝大多数代码库,顺便说一下,这是相当大的!虽然有几个异常值,我不能测量,我在下面记录,希望你能知道答案! 1.CGLIB生成的类 Spring生成了一些额外的类,它们与我的类同名,但在末尾附加了,这些会导致错误。我得到的错误是: 2.打包私密类和私密类 我看到的另一个问题是检测或。 代码如下所示: Byte Buddy instrument或
我正在做一个项目,从firebase(它是“排队的”)中提取数据。本质上,数据是以W/a时间戳的方式保存的,因此当调用数据时,可以按顺序排序(先进先出)。 我面临的问题是当我在我的应用程序上检索数据。根据我的研究,在堆栈溢出和firebase文档中,.value提供一个快照,并在添加新数据时继续监听数据。然而,当添加新数据时,它将获得整个集合的新快照(因此在我的应用程序数组上“复制数据”)。
我目前正在做一个优惠券项目。在处理我的facade类时,我遇到一个问题,通过使用外键从表中输入客户的ID来获取客户已购买的优惠券列表。 我使用的方法是: 优惠券类别: 调用方法: 我的SQL表: Coupon_vs_Customer表仅包含2行。它们都是其他表的外键。CustomerID连接到“Customers”表,而coupon_ID连接到表“Coupons” 正如您在上面看到的,ID为1的客
我正试图从以下网站“url=”上抓取内容https://angel.co/life-sciences' ". 该网站包含8000多个数据。从这个页面我需要像公司名称和链接,加入日期和追随者的信息。在此之前,我需要通过单击按钮对followers列进行排序。然后单击“更多隐藏”按钮加载更多信息。页面最多可点击20次(隐藏更多)内容,此后不会加载更多信息。但我只能通过排序来获取顶级追随者的信息。这里我
我正在使用AWS Java SDK v2列出使用AWS GitHub repo中定义的代码的用户。 它为。下面是上面代码中print语句的输出。 当我在AWS控制台上的AWS CloudShell中运行以下命令时,它将返回所定义用户的PermissionBoundary。