Search code examples
androidgreenrobot-eventbus

EventBus throws No public method onEvent(Message message) when I register


I have this pretty straight forward declaration

@Override
public void onStart() {
    super.onStart();
    EventBus.getDefault().register(this);
}

@Override
public void onStop() {
    EventBus.getDefault().unregister(this);
    super.onStop();
}

public void onEventMainThread(RefreshMessage message){
    ToastUtils.showLongToast(getActivity(), message.getRefresh() ? "ok":"false");
}

I don't know why it still throws

has no public methods called onEvent

Please let me know if I missed something. Also my fragment extends an AbstractClass


Solution

  • Because it's taking me so long to debug the error, I implemented my own simple EventBus using a singleton

    public class EventBusMainThread {
    private static EventBusMainThread selfInstance;
    
    private List<EventBusSubscriber> subscribers;
    
    public EventBusMainThread() {
        this.subscribers = new CopyOnWriteArrayList<>();
    }
    
    public static EventBusMainThread getInstance(){
        if(selfInstance == null)
            selfInstance = new EventBusMainThread();
        return selfInstance;
    }
    
    public synchronized void register(EventBusSubscriber subscriber){
        subscribers.add(subscriber);
    }
    
    public synchronized void unregister(EventBusSubscriber subscriber){
        subscribers.remove(subscriber);
    }
    
    public void post(Object message){
        for(EventBusSubscriber subscriber : subscribers){
            subscriber.onEvent(message);
        }
    }}