我正在关注this architecture来构建应用。
我想获取设备的GCM令牌并将其发送到我的服务器。这是抛出异常的行:
String token = instanceID.getToken(Constants.SENDER_ID,
GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
当我使用RxAndroid时,我不明白为什么会发生这种情况,因为这一行是在一个新线程中执行的。我甚至同步向我的服务器发出请求,一切正常。
我如何配置Rx:
public class RegisterGcmUseCase {
private Subscription subscription = Subscriptions.empty();
public void execute(Subscriber UseCaseSubscriber) {
this.subscription = this.buildUseCaseObservable()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(UseCaseSubscriber);
}
public Observable buildUseCaseObservable() {
// ...
InstanceID instanceID = InstanceID.getInstance(context);
String token = "";
try {
token = instanceID.getToken(Constants.SENDER_ID,
GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
} catch (IOException e) {
e.printStackTrace();
}
// ...
}
}
知道发生了什么事吗?
感谢。
答案 0 :(得分:1)
抛出异常是因为你在主线程上调用instanceID.getToken并且不允许这样做。在后台线程中调用此方法将解决此问题。
答案 1 :(得分:0)
您还没有提供足够详细的如何在buildUseCaseObservable()
中构建Observable 。我怀疑在创建Observable时仍然会调用instanceID.getToken(...)
,这发生在主线程上。
我的建议是使用defer()
运算符构造Observable,它将在订阅上构造Observable。