我正在尝试在我的项目中使用 EventBus,但我遇到了问题。我有一个带有通用 EVENT 参数的片段的超类:
public abstract class BaseNetworkFragment<EVENT extends BaseEvent> extends Fragment {
//some code
@Override
public void onResume() {
super.onResume();
EventBus.getDefault().register(this);
}
@Override
public void onPause() {
super.onPause();
EventBus.getDefault().unregister(this);
}
@Subscribe
public void onApiResponse(EVENT event) {
//some action
}
}
我有一个超类 BaseEvent。和2个事件类:
public class EventOne extends BaseEvent{
}
public class EventTwo extends BaseEvent{
}
我使用通用参数 EventOne 创建 Fragment 并调用 Api:
public class MyFragment extends BaseNetworkFragment<EventOne> {
//some code
//make request for Api, when ServiceHelper has results it posts EventOne
ServiceHelper.getInstance().getSomeData();
}
现在我不使用 EventTwo 并且一切正常。
但是如果我添加我的 MyFragment 代码:
@Subscribe
public void onEventTwo(EventTwo event) {
//some action
}
并要求 Api 服务发布 EventTwo 结果,我有错误。我的方法onEventTwo();
工作正常,但超类中的方法onApiResponse();
也接收 EventTwo,但它只能接收 EventOne!所以我有 ClassCastException
我还注意到,如果我onApiResponse()
从超类中删除方法并将其写入 MyFragment 一切都会好的,但我需要在超类中使用此方法。
我认为该问题出在通用参数中,但我无法解决。我也对异步请求使用改造。请帮我)