Я разрабатываю приложение для Android, которое должно использовать разбиение на страницы на RecyclerView
. Я использую Executor
в Service
для отправки веб-запросов к API, а затем сохраняю полученные данные в БД. Чтобы уведомлять об изменениях в БД, а затем применять новые данные в моем адаптере, я предлагаю использовать шину событий Otto. Шаблон издатель/подписчик для меня довольно новый, поэтому я пытался найти хороший учебник или объяснение, как это должно работать, но после двух дней поиска у меня есть только туманное представление о том, что я должен реализовать и как на самом деле работает шина событий. Может ли кто-нибудь дать хороший совет, с чего мне начать или дать ссылку на учебник или образец кода? я знаю, что это действительно вопрос новичка, но на данный момент я не вижу альтернативы.
Android: реализация шины событий Otto
Ответы (2)
Лучшие руководства, которые я нашел: от Vogella и от Путь к коду. Я надеюсь, что это поможет кому-то. И хорошее замечание, основанное на моем опыте - Otto EventBus работает синхронно, имейте это в виду.
person
Autumn_Cat
schedule
10.08.2016
импортируйте эту библиотеку в свой уровень приложения:
implementation 'org.greenrobot:eventbus:3.0.0'
создайте класс для обработки событий:
public class DataSyncEvent {
private final String syncStatusMessage;
private final String countryName;
private final int postion;
public DataSyncEvent(String syncStatusMessage, int postion, String countryName) {
this.syncStatusMessage = syncStatusMessage;
this.postion = postion;
this.countryName = countryName;
}
public String getSyncStatusMessage() {
return syncStatusMessage;
}
public String countryName() {
return countryName;
}
public int getPostion() {
return postion;
}
}
теперь передайте значения из вашего класса/фрагмента или службы:
EventBus.getDefault().post(new DataSyncEvent(leftOrRight, position, countryName));
не забудьте зарегистрироваться и отменить регистрацию автобуса, на котором вы используете @Subscribe
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
с @Subscribe вы можете получить эти значения:
@Subscribe
public void onEvent(DataSyncEvent syncStatusMessage) {
if (syncStatusMessage.getSyncStatusMessage().contains("left")) {
leftPosition = syncStatusMessage.getPostion();
img_flag_left.setImageResource(countriesFlag[leftPosition]);
leftCountryName.setText(syncStatusMessage.countryName());
} else {
rightPosition = syncStatusMessage.getPostion();
img_flag_right.setImageResource(countriesFlag[rightPosition]);
rightCountryName.setText(syncStatusMessage.countryName());
}
}
person
Null Pointer Exception
schedule
13.03.2019