我正在将 Android 应用程序迁移到 Retrofit 2.0。我有一个自定义的 ErrorHandler 扩展,RetrofitError这样我就可以对不同的 Http 错误做出反应。
现在我明白我必须创建一个自定义CallAdapterFactory. 我使用了这里ErrorHandlingCallAdapter提供的示例。
我的结果CallAdapter几乎是相同的代码,但如果需要,我也可以发布我的代码。
发生的情况是,当我使用 this 时CallAdapterFactory,主线程上没有发生回调。当我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);
}
}
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)
我由此受到启发。
| 归档时间: |
|
| 查看次数: |
1281 次 |
| 最近记录: |