从Firebase检索信息以及使用REST与Retrofit和RxJava进行解析时出现问题

安德烈斯·奥勒(Andres Oller)

好吧,我一直在使用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的响应不是数组,是否有办法解决这个问题?

安德烈斯·奥勒(Andres Oller)

好吧,由于此评论,我可以解决问题:

@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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用 GsonConverterFactory Retrofit 解析 json 时出现问题

使用Curl下载HTML进行解析时出现问题

使用HTTP协议从网页中检索信息时出现问题

将输入与文件信息进行比较时出现问题

在Django Rest框架中使用POST方法发送信息时出现问题

在SQLite Android中使用换行符添加和检索文本时出现问题

使用Selenium加载页面和抓取信息时出现问题

使用FutureBuilder检索元素时出现问题

使用BeautifulSoup检索Google Scholar结果时出现问题

使用PHP exec()获取更新信息时出现问题

检索自定义节点属性以及在露天删除节点时出现问题

使用Java和REST发送Apple Push Notification时出现问题

从GoPro检索视频时出现问题

在Spring Boot App中使用@Valid和BindingResult进行表单输入验证时出现问题

使用Azure Functions和Azure Cosmos DB时出现问题,返回“停机进行维护”

使用Selenium和Python进行网络抓取时出现问题

使用Apache Tika解析iWorksDocument时出现问题

使用NodeJS解析JSON时出现问题

使用xPathAPI解析xml时出现问题

使用Entrez从PubMed解析发布数据时出现问题

使用Google脚本解析XML时,getChild出现问题

使用AST解析的字典时出现问题

使用 Swift 从 API 解析 JSON 数据时出现问题

使用jsoup解析HTML表时出现问题

使用Cloud Functions for Firebase和@ google-cloud / storage删除图像时出现问题

使用Firebase函数和Express连接到socket.io时出现问题

从页面检索信息并将其提交给 JavaScript 对象构造函数时出现问题

使用ClientResponse Jersey调用Rest API时出现问题

使用JBoss部署REST服务时出现问题