EventBus - 类不识别@Subscribe注释

时间:2018-01-20 13:45:15

标签: java android event-bus greenrobot-eventbus greenrobot-eventbus-3.0

我不明白,我已经在其他项目中使用该库,并且它工作正常。我仔细检查代码,它是一样的,但这个只是不工作。!?

ERROR

java.lang.RuntimeException: Unable to start activity XXX/UserRegisterationActivity}: org.greenrobot.eventbus.EventBusException: 
       Subscriber class XXXX.UserRegisterationActivity and its super classes have no public methods with the @Subscribe annotation

   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2484)
   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2544)
   at android.app.ActivityThread.access$900(ActivityThread.java:150)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1394)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:168)
   at android.app.ActivityThread.main(ActivityThread.java:5845)
   at java.lang.reflect.Method.invoke(Native Method)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687)

接收活动

public class UserRegisterationActivity extends BaseActivity {


  @Subscribe // I made sure to import greenroots's class not google's
    private void initRegistration(UserRegisteration reg) {

    switch (reg.getType()) {
      case 0: // register
        // do stuff
        break;

      case 1: // ticket
        // do other stuff
        break;
      default:
        break;
    }

  }

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

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


}

活动类

 public class UserRegisteration {

  private int type;
  private UserDetails mUserDetails ;

  public EventRegisteration(int type, UserDetails userDetails) {
    this.type = type;
    this.mUserDetails = userDetails;
  }

  public int getType() {
    return type;
  }

  public void setType(int type) {
    this.type = type;
  }

  public UserDetails getUserDetails() {
    return mUserDetails;
  }

  public void setUserDetails(UserDetails userDetails) {
    mUserDetails= userDetails;
  }

}

发布活动

    public class MainActivity extends BaseActivity {
    int type =0;
    UserDetails userData;
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initView();

    actionButton.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View view) {
          EventBus.getDefault().post(new UserRegisteration (type, userData));
          startActivity(new Intent(MainActivity.this, UserRegisterationActivity.class)); 
      }
      });

}

有些人建议在ProGrad中添加一行,这样就不会删除订阅者等等。所以我添加了这些,但仍然没有工作

-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);
}

1 个答案:

答案 0 :(得分:1)

错误表明您没有带有@Subscribe注释的公开方法。确实你的方法是私人的。尽量公开。

另请考虑使用Sticky Events