问题描述
我正在使用RxJava和Retrofit,并看到了一些非常奇怪的间歇性问题。我发生了两个单独的调用,并将它们添加到Composite Disposable,这似乎使它们混淆了。在一个电话中,我正在执行GET提取主页数据。在另一个示例中,我正在执行POST以将推送通知令牌发送到服务器。但是有时它试图发布到GET,反之亦然。并非总是如此,这令人难以置信地令人困惑和沮丧。
创建令牌请求:
var tokenRequest = UpdateMyDevice()
tokenRequest.deviceToken = prefs.getString(R.string.device_push_id)
tokenRequest.firebaseToken = task.result!!.id
tokenRequest.notificationToken = token
compositeDisposable.add(userManager!!.sendNotificationToken(tokenRequest).subscribe(
{ item ->
},{ e ->
e.printStackTrace()
})
)
这是UserManager中的sendNotificationToken
public Single<MessageResponse> sendNotificationToken(UpdateMyDevice update){
return authService.sendNotificationToken(update.jsonBody())
.doOnError(error -> error.printStackTrace())
.doOnSuccess(item ->{
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
和AuthService sendNotificationToken
@POST(Constants.PROFILE_URL + "/devices")
Single<MessageResponse> sendNotificationToken(
@Body RequestBody body
);
这是获取主页数据的地方:
compositeDisposable.add(userManager!!.homePage.subscribe(
{ data ->
//this will work most of the time?
},{ e ->
e.printStackTrace()
}))
这是userManager中的主页
public Single<HomeResponse> getHomePage(){
return contentService.getHomePage()
.doOnError(error -> error.printStackTrace())
.doOnSuccess(item ->{
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
和ContentService中的getHomePage(请注意,此调用和令牌调用完全不同的服务)
@GET(Constants.PROFILE_URL + "/home")
Single<HomeResponse> getHomePage();
但是我收到错误消息,说GET不是令牌端点的允许方法,而POST对于主页无效。您可以看到它们分别声明为@GET和@POST,并且应该没有问题路由。
我在做什么错?为什么这些似乎混乱或更改请求之类?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)