从 OkHttp 拦截器通知 UI
Notify UI from OkHttp Interceptor
我需要根据拦截器中的布尔值更改 UI(我只在拦截器内部了解它,它永远不会离开它)。
我想到的可能解决方案:
创建像 new Handler(Looper.getMainLooper())
这样的处理程序,然后执行 .post(new Runnable()..)
,但我不想将 UI 逻辑混入拦截器 class.
您可以尝试使用 EventBus。
- 将以下依赖项添加到您的
build.gradle
文件中:
dependencies {
// ...
implementation 'org.greenrobot:eventbus:3.1.1'
}
- 创建 class 以保存来自拦截器的数据:
public static class InterceptorEvent { /* Add fields you need */ }
- 在您的拦截器中,post 事件使用以下代码:
EventBus.getDefault().post(new InterceptorEvent());
- 随时随地订阅
InterceptorEvent
:
@Subscribe(threadMode = ThreadMode.MAIN)
public void onInterceptorEvent(InterceptorEvent event) {
// Do whatever you want
}
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
希望我的回答对您有所帮助。
我需要根据拦截器中的布尔值更改 UI(我只在拦截器内部了解它,它永远不会离开它)。
我想到的可能解决方案:
创建像 new Handler(Looper.getMainLooper())
这样的处理程序,然后执行 .post(new Runnable()..)
,但我不想将 UI 逻辑混入拦截器 class.
您可以尝试使用 EventBus。
- 将以下依赖项添加到您的
build.gradle
文件中:
dependencies {
// ...
implementation 'org.greenrobot:eventbus:3.1.1'
}
- 创建 class 以保存来自拦截器的数据:
public static class InterceptorEvent { /* Add fields you need */ }
- 在您的拦截器中,post 事件使用以下代码:
EventBus.getDefault().post(new InterceptorEvent());
- 随时随地订阅
InterceptorEvent
:
@Subscribe(threadMode = ThreadMode.MAIN)
public void onInterceptorEvent(InterceptorEvent event) {
// Do whatever you want
}
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
希望我的回答对您有所帮助。