事件总线 - 类无法识别@Subscribe注释



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


错误

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

该错误表明您没有带有@Subscribe注释的公共方法。事实上,你的方法是私人的。尝试将其公开。

还可以考虑使用粘滞事件。

最新更新