android-Retrofit 2.0-自定义CallAdapterFactory-MainThread上未发生回调

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

现在,我知道必须创建一个自定义的CallAdapterFactory.我使用提供的示例ErrorHandlingCallAdapter here.

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

发生的是,当我使用此CallAdapterFactory时,在MainThread上没有发生回调.尝试更新UI时,我得到android.view.ViewRootImpl $CalledFromWrongThreadException(我一直需要).我也不想总是将我的代码与runOnUIThread一起包装在我的回调中.

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

解决方法:

我最终将执行程序传递给我的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);
    }
}

.addCallAdapterFactory(new ErrorHandlingCallAdapter.ErrorHandlingCallAdapterFactory(new MainThreadExecutor()))

并将回调包装在:

callbackExecutor.execute(new Runnable() {
    @Override
    public void run() {
    }
});

我从this开始启发自己.

上一篇:Android中不推荐使用’java.lang.String’


下一篇:膜拜大牛!最全Android面试知识点梳理,真香!