gpt4 book ai didi

android - Retrofit 请求完成后会发生什么?

转载 作者:太空狗 更新时间:2023-10-29 14:47:26 25 4
gpt4 key购买 nike

我有一个似乎与 Retrofit 有关的奇怪问题。

假设我有一个只有一个 Activity 的示例应用程序。它还在 styles.xml 中将 windowBackground 设置为红色。现在我在 onCreate 中做这样的事情:

public void onCreate() {
retrofit.foo()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ response ->
// ignore
}, { error ->
finish()
})
}

为了测试它,我在没有互联网连接的情况下运行这个应用程序,所以它总是调用 onError

我希望在我启动应用程序后,它会显示红色背景,尝试发出请求,然后它会调用 finish() 并关闭 Activity。在功能上它似乎工作正常但在视觉上有一个奇怪的问题。它显示红色背景,然后变黑一会儿,然后再次变红,最后应用程序关闭。

我尝试用一​​个简单的 Observable 替换 Retrofit 调用,该 Observable 在一些延迟后发出错误并且它工作正常(没有黑色背景)。这就是为什么我认为它与 Retrofit 有关的原因。如果我执行 onErrorResumeNext 并在 onNext 中调用 finish(),行为是相同的。但是,如果我有互联网连接并且通话成功,那么就没有黑色背景。当非 http 错误发生时,似乎发生了一些事情。

经过一些调查,我注意到这可能不是 OkHttp 的错。我将 OkHttp 调用包装在 Obsevable.create 中,当它发出错误时我调用了 finish()。在这种情况下没有黑屏。仅在使用 Retrofit 时。我还尝试在没有 RxJava 的情况下使用 Retrofit - 简单的 call.enqueue 但它无法正常工作(显示黑屏)。

我正在使用带有 RxJava 适配器的 Retrofit 2.0.2。我在 Android 5.1.1 上重现了这个问题。

最佳答案

我认为您可能遇到的问题是 Activity 动画。尝试禁用 Activity 动画

public void onCreate() {
retrofit.foo()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ response ->
// ignore
}, { error -> {
finish();
overridePendingTransition(0, 0);
}
})
}

关于android - Retrofit 请求完成后会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38368374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com