我正在使用Otto的Retrofit。 我的问题是如何订阅同一片段(或活动)中的多个事件。根据{{3}} "该方法应该只采用一个参数,其类型将是您要订阅的事件。" :
我无法执行@Subscribe public void getAllData(Event1 event1, Event2 event2);
。
此外,我无法订阅两次,例如:同一片段(或活动)类中的@Subscribe public void getDataOne(Event1 event1);
和@Subscribe public void getDataTwo(Event2 event2);
。
在我的Fragment类中,我注册并取消注册总线:
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
BusProvider.getInstanceBus().register(this);
}
@Override
public void onDetach() {
super.onDetach();
BusProvider.getInstanceBus().unregister(this);
}
使用泛型类:
public class BusProvider {
private static final Bus BUS = new Bus();
public static Bus getInstanceBus(){
return BUS;
}
private BusProvider(){}
}
我从我的改装请求的success()
方法发布了我的活动:
@Override
public void success(DataResponseOne dataResponseOne, Response response) {
Log.d(GeneralConstants.LOG_TAG, " !SUCCES!");
//sent data to otto bus
BusProvider.getInstanceBus().post(dataResponseOne);
[some code for to get json in string]
Log.d(GeneralConstants.LOG_TAG + " !SUCCES!" + resultJSON );
}
和第二个事件相同:
@Override
public void success(DataResponseTwo dataResponseTwo, Response response) {
Log.d(GeneralConstants.LOG_TAG, " !SUCCES!");
//sent data to otto bus
BusProvider.getInstanceBus().post(dataResponseTwo);
[some code for to get json in string]
Log.d(GeneralConstants.LOG_TAG + " !SUCCES!" + resultJSON );
}
我想我错过了一些棘手的事情。任何建议将不胜感激。
答案 0 :(得分:2)
实际上我的库已从.toMatch(RegExp)
更改为expect(row.getText()).toMatch(/H[aå]kan [AÅ]str[oö]m/)
(com.google.common.eventbus)。这里不再是一个大问题,我可以使用相同的方式在相同的片段/活动中订阅多个事件。无论如何,我会在这里为那些有同样问题的初学者提供一些代码。
所以,首先我们需要将库声明为gradle:
Otto
然后使用EventBus实例为所有项目创建一个泛型类:
EventBus
将您的活动发布到巴士:
(第一个)
compile group: 'com.google.guava', name: 'guava', version: '15.0'
(第二个)
public class EventBusGenerics {
private static EventBus
EVENTBUS = new EventBus();
public static EventBus getInstanceEventBus() {
return EVENTBUS;
}
private EventBusGenerics() {
}
}
注册并取消注册我们需要此事件的片段/活动:
(这里是片段)
@Override
public void success(DataResponseOne dataResponseOne, Response response) {
Log.d(GeneralConstants.LOG_TAG, " !SUCCES!");
//sent data to otto bus
BusProvider.getInstanceBus().post(dataResponseOne);
[some code for to get json in string]
Log.d(GeneralConstants.LOG_TAG + " !SUCCES!" + resultJSON );
}
订阅活动,两者:
@Override
public void success(DataResponseTwo dataResponseTwo, Response response) {
Log.d(GeneralConstants.LOG_TAG, " !SUCCES!");
//sent data to otto bus
BusProvider.getInstanceBus().post(dataResponseOne);
[some code for to get json in string]
Log.d(GeneralConstants.LOG_TAG + " !SUCCES!" + resultJSON );
}
答案 1 :(得分:0)
您可以让两个数据响应扩展您的订阅者作为参数使用的相同基类。然后,您可以使用instanceOf查看它是Event1
还是Event2
。