使用 RxJava 发出 Quickblox API 请求
Using RxJava to make Quickblox API requests
我正在尝试使用 Quickblox Android SDK combined with RxJava 进行一些链式和基于时间的 Quickblox API 调用。 API 已经有 async 方法。这是其中两个:
创建会话:
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 调用。示例:
- 创建空会话,然后
- 先登录,然后
- 检索用户信息,然后
- 登录聊天服务,然后
- .....
我搜索了一下 RxJava,发现解决这类问题很好,因为您可以在进行下一个 API 调用之前应用一些过滤器和其他东西。问题是我不知道如何调整这个 API 以与 RxJava 一起工作。
带回调的API调用是否应该在Observable
call()
方法中?
Quickblox API 的 onError()
和 onSuccess()
方法是否应该调用 onError()
和 onNext()
/[= Subscriber
?
的 19=] 方法
任何人都可以举例说明使用
RxJava 创建会话,然后使用创建对话框
提供 创建会话 和 创建对话框 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*/);
}
});
}
}
});
我正在尝试使用 Quickblox Android SDK combined with RxJava 进行一些链式和基于时间的 Quickblox API 调用。 API 已经有 async 方法。这是其中两个:
创建会话:
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 调用。示例:
- 创建空会话,然后
- 先登录,然后
- 检索用户信息,然后
- 登录聊天服务,然后
- .....
我搜索了一下 RxJava,发现解决这类问题很好,因为您可以在进行下一个 API 调用之前应用一些过滤器和其他东西。问题是我不知道如何调整这个 API 以与 RxJava 一起工作。
带回调的API调用是否应该在
Observable
call()
方法中?Quickblox API 的
onError()
和onSuccess()
方法是否应该调用onError()
和onNext()
/[=Subscriber
? 的 19=] 方法
任何人都可以举例说明使用 RxJava 创建会话,然后使用创建对话框 提供 创建会话 和 创建对话框 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*/);
}
});
}
}
});