Я изучаю использование otto как систему событий. Я могу зарегистрировать свою деятельность и получить сообщение от bus.post()
. Однако, если я зарегистрирую свой Application class
, подписанный метод не будет вызван. Что я делаю неправильно?OTTO + Кинжал - Не удается получить сообщение о событии по классу приложения
Это моя активность:
public class MainActivity extends AppCompatActivity {
@Inject
BusWorker busWorker;
@Inject
LogWorker logWorker;
ActivityMainBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
inject();
ButterKnife.bind(this);
busWorker.register(this);
binding.setHandlers(this);
}
@Subscribe
public void recievedMessage(Message message) {
logWorker.log("recievedMessage: " + message.getMessage());
}
public void onClickButton(View view) {
switch (view.getId()) {
case R.id.button:
busWorker.post("Test message");
break;
default:
break;
}
}
@Override
protected void onStop() {
super.onStop();
busWorker.unRegister(this);
}
void inject() {
((App) getApplication()).getGeneralComponent().inject(this);
((App) getApplication()).getSchoolComponent().inject(this);
}
}
App класс
public class App extends Application {
private NetComponent netComponent;
private GeneralComponent generalComponent;
@Inject
public App() {}
@Override
public void onCreate() {
super.onCreate();
netComponent = DaggerNetComponent.builder()
.appModule(new AppModule(this))
.netModule(new NetModule())
.build();
generalComponent = DaggerGeneralComponent.builder()
.netComponent(netComponent)
.generalModule(new GeneralModule())
.build();
netComponent.BusWorker().register(this);
}
@Subscribe
public void recievedMessage(Message message) {
netComponent.logWorker().log("recievedMessage: " + message.getMessage());
}
public GeneralComponent getGeneralComponent() {
return generalComponent;
}
public NetComponent getNetComponent() {
return netComponent;
}
}
Мои NetModule (частично)
@Module
public class NetModule {
public NetModule() {
}
@Provides
@NetScope
BusWorker provideBusWorker(){
return new BusWorker();
}
}
NetScope
@Scope
@Retention(RetentionPolicy.RUNTIME)
public @interface NetScope {
}
Мои NetComponent
@NetScope
@Component(modules={AppModule.class, NetModule.class})
public interface NetComponent {
NetWorker netWorker();
DbWorker dbWorker();
LogWorker logWorker();
SharedPreferencesWorker sharedPreferences();
BusWorker BusWorker();
}
Является ли ваш автобус '@ Singleton' аннотированный или иначе область видимости? Я предполагаю, что вы подписываетесь на два разных объекта шины в активности/приложении. –
Я только что отредактировал исходное сообщение, добавив свой netModule, Scope и компонент. Я что-то упускаю, чтобы убедиться, что я зарегистрируюсь на одном автобусе? – Ricardo
Выглядит хорошо, вы все равно можете просто проверить его, зарегистрировав объекты и сравнив их. –