Событие Bus Подписанное событие не вызывается - PullRequest
0 голосов
/ 24 октября 2019

Я использовал следующий код для связи между фрагментами Tablayout. Создает следующую ошибку.

Нет подписчиков, зарегистрированных для класса события MessageEvent

D / EventBus: Нет подписчиков, зарегистрированных для класса события org.greenrobot.eventbus.NoSubscriberEvent

public class MessageEvent {


        private  int patientId;


        public  MessageEvent(int patientId){

            this.patientId = patientId;
        }

        public int getPatientId(){

            return this.patientId;

        }

    }
Fragment1
EventBus.getDefault().postSticky(new MessageEvent(selectedPatientId));
Fragment 2
 @Override
    public void onStart() {
        super.onStart();

        EventBus.getDefault().register(this);
    }


    @Override
    public void onStop() {
        super.onStop();

        EventBus.getDefault().unregister(this);
    }

    @Subscribe(sticky = true,threadMode = ThreadMode.MAIN)
    public void onEvent(MessageEvent event){

        Log.d("PatientID", "onEvent: " + event.getPatientId());
    }

1 Ответ

0 голосов
/ 24 октября 2019

Я сталкивался с этой проблемой раньше.

Попробуйте создать Singleton Class для EventBus.

Взгляните на.

public class GlobalBus {

    private static EventBus eBus;
    public static EventBus getEventBus() {
        if (eBus == null)
            eBus = EventBus.getDefault();
        return eBus;
    }
}

В вашей инициализации действия или фрагмента

GlobalBus.getEventBus().register(this);

Теперь опубликуйте событие, используя SingleTon Class

GlobalBus.getEventBus().post(new MessageEvent(selectedPatientId));

А также не забудьте добавить правила proguard для производственной сборки.

-keepattributes *Annotation*
-keepclassmembers class * {
    @org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }

# Only required if you use AsyncExecutor
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
    <init>(java.lang.Throwable);
}
...