android - 使用 RxJava 发出 Quickblox API 请求

标签 android rx-java quickblox

我正在尝试使用 Quickblox Android SDK结合RxJava进行一些链式和基于时间的 Quickblox API 调用。 API 已有async 方法。这是其中两个:

创建 session :

QBAuth.createSession(new QBEntityCallbackImpl<QBSession>() {

            @Override
            public void onSuccess(QBSession session, Bundle params) {


            }

            @Override
            public void onError(List<String> errors) {


            }
        });

创建对话(聊天室)

QBChatService.getInstance().getGroupChatManager().createDialog(qbDialog,
            new QBEntityCallbackImpl<QBDialog>() {

                @Override
                public void onSuccess(QBDialog dialog, Bundle args) {


                }

                @Override
                public void onError(List<String> errors) {


                }
            });

如您所见,每个 API 调用都必须有一个回调实现作为方法参数。问题是我必须进行一些链式 API 调用。示例:

  1. 然后创建空 session
  2. 然后登录
  3. 检索用户信息,然后
  4. 登录聊天服务,然后
  5. ....

我搜索了一下 RxJava,发现解决这类问题很好,因为您可以在进行下一个 API 调用之前应用一些过滤器和其他东西。问题是我不知道如何调整这个 API 以与 RxJava 一起工作。

  • 带回调的 API 调用是否应该在 Observable 中? call()方法?

  • 应该 onError()onSuccess() Quickblox API 的方法调用 onError()onNext()/onCompleted() Subscriber 的方法?

谁能举出一些使用的例子 RxJava 创建 session ,然后使用创建对话框 是否提供了创建 session 创建对话 API 方法?

最佳答案

这是一个示例,说明如何在您的案例中使用 Observable.create() 创建可观察对象:

Observable<QBSession> connectionObservable = Observable.create(new OnSubscribe<QBSession>() {
    @Override
    public void call(Subscriber<? super QBSession> subscriber) {
        if (!subscriber.isUnsubscribed()) {
            QBAuth.createSession(new QBEntityCallbackImpl<QBSession>() {

                @Override
                public void onSuccess(QBSession session, Bundle params) {
                    subscriber.onNext(session);
                    subscriber.onCompleted();
                }

                @Override
                public void onError(List<String> errors) {
                    subscriber.onError(/*some throwable here*/);
                }
            });
        }
    }
});

Observable<QBDialog> dialogCreationObservable = Observable.create(new OnSubscribe<QBDialog>() {
    @Override
    public void call(Subscriber<? super QBDialog> subscriber) {
        if (!subscriber.isUnsubscribed()) {
            QBChatService.getInstance().getGroupChatManager().createDialog(qbDialog,
                    new QBEntityCallbackImpl<QBDialog>() {

                        @Override
                        public void onSuccess(QBDialog dialog, Bundle args) {
                            subscriber.onNext(dialog);
                            subscriber.onCompleted();
                        }

                        @Override
                        public void onError(List<String> errors) {
                            subscriber.onError(/*some throwable here*/);
                        }
                    });
        }
    }
});

关于android - 使用 RxJava 发出 Quickblox API 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33769789/

相关文章:

android - 与observeOn组合时RxJava的startsWith操作符被忽略

quickblox - 无法解析 : com. quickblox :quickblox-android-sdk-chat:2. 6.1

android - java.lang.NoSuchMethodError : No direct method at com. google.android.gms.iid.InstanceID.zza

javascript - 快速布洛克 : Notify web client (JavaScript SDK) when new Private chat is created from Android client

kotlin - 使用 RxJava 构建 "task queue"的最佳方式

android - 可观察的延迟会忽略设备动画设置

java - 在 RecyclerView 中的指定元素上显示 float 操作按钮

android - 如何在flutter mobile中保存网站以供离线使用

java - 如何通过动态使用android中的方法建立一个字符串url?

android - 如何使用表格布局在 ImageView 上设置文本?