有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Greenrobot EventBus3未向我的订阅者发布

在我的应用程序中,我将一个job传递到job-queue中,在我的作业队列中,我已经注册了我的EventBus,我正在尝试post事件,希望我的subscriber方法能够收到它。我最近刚从Otto's{}迁移过来,虽然这种方法以前是有效的,但它不适用于绿色机器人EventBus3

以下是我试图实现的一个示例:

TestPresenterImpl.class(该类已被TestActivity.class实例化)

@Override
public void addJob(JobData jobData) {
    jobManager.addJobInBackground(new SendUpdateJob(jobData));
}

@Subscribe
@Override
public void onUpdate(JobAddedEvent event) {
    if (event.getStatus() == 1) {
        Log.i(LOG_TAG, "test");
    }
}

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

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

SendUpdateJob.class(这个类使用先前由Path维护的安卓优先级作业队列处理队列中的作业)

@Override
public void onAdded() {
    Log.i(LOG_TAG, "On added");
    mBus.getDefault().register(this);
    JobAddedEvent event = new JobAddedEvent();
    event.setStatus(1);

    mBus.getDefault().post(event);
}

通常这在Otto上起作用,但由于这有点不同,我想知道我做错了什么。我得到的错误是:"SendJobUpdate and its super classes have no public methods with the @Subscribe annotation".我在这里做错什么了吗

我还确保我正在导入import org.greenrobot.eventbus.Subscribe; ,因为我注意到其他人指出他们已经导入了谷歌


共 (1) 个答案

  1. # 1 楼答案

    你的EventBus.getDefault().register(this);应该遵循你的@Subscribe方法所在的活动,而不是mBus.getDefault().post(event);活动

    第一活性

    public class FirstActicity extends AppCompatActivity {
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
        //register should in this activity
        EventBus.getDefault().register(this);
    }
    
    @Subscribe(threadMode = ThreadMode.MainThread)
    public void onEvent(MessageEvent event) {
        //eventbus notify
        Log.i("2hh", "main  - eventbus    updatedata");
        queryData();
    }
    
    @Override
    protected void onDestroy() {
        if (EventBus.getDefault().isRegistered(this)) {
            EventBus.getDefault().unregister(this);
        }
    }
    

    SecondActivity(不要在此活动中注册,因为您没有任何@Subscribe方法)

    public class SecondActivity extends AppCompatActivity implements{
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add);
    
        EventBus.getDefault().post(new MessageEvent("updateData"));
    
    
    }
    

    }