Retrofit 2.0 - 自定义 CallAdapterFactory - 主线程上未发生回调

Mat*_*hbl 5 android retrofit

我正在将 Android 应用程序迁移到 Retrofit 2.0。我有一个自定义的 ErrorHandler 扩展,RetrofitError这样我就可以对不同的 Http 错误做出反应。

现在我明白我必须创建一个自定义CallAdapterFactory. 我使用了这里ErrorHandlingCallAdapter提供的示例。

我的结果CallAdapter几乎是相同的代码,但如果需要,我也可以发布我的代码。

发生的情况是,当我使用 this 时CallAdapterFactory,主线程上没有发生回调。当我android.view.ViewRootImpl$CalledFromWrongThreadException尝试更新用户界面时(我总是需要这样做)。我也不想总是在回调中使用 runOnUIThread 包装我的代码。

我不知道这是否有帮助,但是当我登录Thread.currentThread().getName()回调时,它返回 OkHttp。

Mat*_*hbl 3

我最终将执行程序传递给我的 CallAdapter.Factory:

public static class MainThreadExecutor implements Executor {
    private final Handler handler = new Handler(Looper.getMainLooper());

    @Override
    public void execute(@NonNull Runnable r) {
        handler.post(r);
    }
}
Run Code Online (Sandbox Code Playgroud)

...

.addCallAdapterFactory(new ErrorHandlingCallAdapter.ErrorHandlingCallAdapterFactory(new MainThreadExecutor()))
Run Code Online (Sandbox Code Playgroud)

并将回调包装在:

callbackExecutor.execute(new Runnable() {
    @Override
    public void run() {
    }
});
Run Code Online (Sandbox Code Playgroud)

我由此受到启发。