我正在尝试使用 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 调用。示例:
- 然后创建空 session
- 然后登录
- 检索用户信息,然后
- 登录聊天服务,然后
- ....
我搜索了一下 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/