【问题标题】:Android Retrofit2 POST call not triggering HTTP requestAndroid Retrofit2 POST 调用未触发 HTTP 请求
【发布时间】:2018-03-24 04:54:36
【问题描述】:

我在 Android 上使用 Retrofit2 /RxJava。我的 POST 电话通常工作正常。但现在我添加了来自另一个位置的呼叫。调用时,没有发送 HTTP 发布请求,也没有错误/异常。 HttpInterceptor 也没有看到调用。在这种情况下,我很难找出我做错了什么。

mAccountManager.onAuthChange()
        .subscribeOn(Schedulers.io())
        .subscribe(authCode -> {
            if (mAccountManager.isLoggedIn(authCode)) {
                someOtherApi.getIds()
                        .subscribeOn(Schedulers.io())
                        .subscribe(idList -> {
                            mUserApi.doSomething(idList);
                        }); 
            }   
        }); 

...

@POST("/api/users/dosomething")
Observable<Void> doSomething(@Body IdList idList);

我确保通过放置断点来调用改造 api。

知道我错过了什么吗?

【问题讨论】:

  • 确保它在if (mAccountManager.isLoggedIn(authCode)) 条件内。还要为mAccountManager.onAuthChange() 添加 onError 部分,看看它是否给出任何错误
  • 请看我的编辑
  • 你的 onAuthChange 确实被调用了,但我要求的是在它到达 subscribe 部分后检查你的条件是否得到满足
  • 好的,mUserApi.doSomething(idList) 返回 observable 并且在您订阅它之前不会触发。所以你也必须订阅mUserApi.doSomething(idList),然后才会触发
  • @SandipSoni 谢谢 - 这就是问题所在。请添加为答案,我将标记为已接受

标签: java android retrofit retrofit2


【解决方案1】:

Retrofit 的 rx-adapter 创建 cold 可观察对象,即在您订阅它之前它不会做任何事情。所以你的问题是,你没有订阅mUserApi.doSomething(idList); API 调用。

所以只需订阅它,它就会被调用。我也不确定mAccountManager.onAuthChange() 的代码,但你应该在subscribe 中也有onError 部分以避免UndeliverableException

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多