我正在关注 this architecture构建应用程序。
我想获取设备的 GCM token 并将其发送到我的服务器。这是抛出异常的行:
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();
}
// ...
}
}
知道发生了什么吗?
谢谢。
最佳答案
抛出异常是因为您在主线程上调用 instanceID.getToken 而这是不允许的。在后台线程中调用此方法将解决问题。
关于java - 使用 InstanceID 和 ReactiveX 的 IOException (MAIN_THREAD),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33520392/