2017-08-01 8 views
0

私はEventBus libを実装して、どのクラスやフラグメントからもデータを取得し、メソッドをサブスクライブして即座に変更されたデータを取得します...しかし、次のエラーメッセージ:サブスクライバクラスとそのスーパークラスには@subscribeアノテーションを持つパブリックメソッドがありません

org.greenrobot.eventbus.EventBusException:加入者クラスjava.lang.Booleanのとそのスーパークラスは、私はgithubのような方法をサブスクライブしている@Subscribe注釈

とはパブリックメソッドを持っていませんshowed here

コードは、私が唯一

アダプタ

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

更新アクティビティここでは必要とされていない残りのコードとして採用するために必要なコードを掲載している

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 
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 
+0

を参照する必要があります。https://stackoverflow.com/questions/35874055/eventbus-subscriber-class-and-its-super-classes-have -no-public-methods-with-th/35912503#35912503 – magiccus

答えて

0

以下のコードでonStartonDestroyコードを変更してください:

私がやっている何
@Override 
    public void onStart() { 
     super.onStart(); 
     EventBus.getDefault().register(this); 
    } 

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

があり、現在のクラスにイベントを登録します。

詳細については、あなたの質問への答えがあるhttp://greenrobot.org/eventbus/documentation/how-to-get-started/

+0

私はすでに ' –

+0

'を見ました@beginnerは 'true'の代わりに' this'を試したことを意味しますか?それでも同じエラーが出る? –

+0

アクティビティコード –

関連する問題