当前位置: 首页 > 知识库问答 >
问题:

Subscriber类及其超类没有带有@subscribe注释的公共方法

吕岳
2023-03-14

我正在实现EventBus lib来传递和获取来自任何类或片段的数据,并且还订阅了一个方法来获取即时更改的数据...但是我收到了以下错误消息

组织。绿色机器人。事件巴士。EventBusException:订阅者类java。Boolean及其超类没有带有@Subscribe注释的公共方法

我已经订阅了github在这里展示的方法

代码片段

public class ItemFragment extends Fragment {
    View view;
    String data;
    RecyclerView recyclerView;
    CategoryAdapter itemAdapter;
    List<Category.Items> list;
    private String TAG = getClass().getName();


    public static ItemFragment newInstance(String detail) {

        Bundle args = new Bundle();
        ItemFragment fragment = new ItemFragment();
        args.putString("data", detail);
        fragment.setArguments(args);
        return fragment;
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.cat_recy, container, false);

        return view;

    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        recyclerView = (RecyclerView) view.findViewById(R.id.recyclerview);

        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);
        recyclerView.setLayoutManager(linearLayoutManager);
        data = getArguments().getString("data");



    }

    @Subscribe(threadMode = ThreadMode.MAIN)
    public void getEventBusData(MessageEvent messageEvent) {
        if (messageEvent != null) {
            Category.Items itemClass = EventBus.getDefault().getStickyEvent(Category.Items.class);
            Log.e("eventBus", itemClass.getItem_name() + "  " + itemClass.getPrice() + "  " + itemClass.getCount());
        }

    }

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

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

我只发布了应用程序所需的代码,因为这里不需要其他代码

适配器

 @Override
        public void onBindViewHolder(final Holder holder, int position) {
            final Category.Items category = list.get(position);
      holder.catPlus.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
     EventBus.getDefault().postSticky(category);
    }
    }

更新活动类

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

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

}
@Subscribe(threadMode = ThreadMode.MAIN)
public void getEventBusData(Items messageEvent) {
    if (messageEvent != null) {
        Items itemClass = EventBus.getDefault().getStickyEvent(Items.class);
        Log.e("eventBus", itemClass.getItem_name() + "  " + itemClass.getPrice() + "  " + itemClass.getCount());
        calculation();
    }

}

新错误

org.greenrobot.eventbus.EventBusException: Subscriber class com.icanstudioz.foodpaprica.fragment.ItemFragment already registered to event class com.icanstudioz.foodpaprica.data.Items

共有2个答案

连坚白
2023-03-14

请按以下代码更改onStartonestory代码:

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

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

我正在做的是,将事件注册到当前类。

有关更多详细信息,您必须参考http://greenrobot.org/eventbus/documentation/how-to-get-started/

曾洲
2023-03-14
-keepattributes *Annotation*
-keepclassmembers class ** {
    @org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }
 类似资料:
  • 我正在使用来控制的状态,但是我在执行过程中遇到了一个错误。 原因:org.greenrobot.eventbus.事件总线异常:订阅者类maa. Mainactive及其超类没有带有@Subcribe注释的公共方法 无线电经理。JAVA

  • 我正在使用EventBus创建一个Android应用程序,用于向其他类发布异步广播,但在执行过程中遇到了一个错误。 LogCat显示以下内容: 为什么会这样?我做错什么了吗?

  • 有可能通过AOP(使用Spring aop、aspectj等)审核用@Service或@Repository注释的类的所有公共方法,或者我认为是类级别而不是方法级别的注释?我想有这样的东西:

  • 我需要处理从带有注释的类的公共方法中抛出的所有异常。我尝试使用Spring AOP。这是我的记录器: 是我的注释。 然后,我将注释添加到我的配置类中。 首先,我尝试注释一些引发异常的方法。它工作得很好,但是我如何才能使这种工作用于用注释注释的类中的所有公共方法呢?

  • 我创建了一个包含一些基本crud方法的CrudController。这很好用。当我想保护这个控制器时,我可以重写超类中的方法,这很好。然而,我不想仅仅为了安全而重写每个方法。为此,我想在类上使用@Secured或@PreAuthorize。 我使用的是Spring Boot 2.2.2(最新版本)。 示例Crud基类 实现类 预期行为 当一个类被注释为@PreAuthorize或@安全时,我希望所

  • 我有两节课 使用Spring AOP,我需要包装: 如果注释放在类级别上,则对使用注释的所有公共方法的所有调用 这是我的切入点 这适用于的公共方法,但是当我调用时,未包装如何包含父方法?