Setup Ich experimentiere EventBus Libaray. Ich habe es nur in Fragment registriert und ich verwendete @Subcride
Annotation in dieses Fragment mit public
Methoden, aber wenn ich die App ausführen, bekomme ich eine Ausnahme, die besagt, dass ich @Subcribe
Annotation mit public
Methoden in super
Klasse nicht verwendet habe. Warum muss ich es in Klasse super
deklarieren? Wie dieses Problem Dies ist mein erstes Mal mit EventBusWie EventBus in Fragment
Hier Code
Fragment
public class SignUpFragment extends BaseFragment {
Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View layout = inflater.inflate(R.layout.fragment_sign_up, container, false);
ButterKnife.bind(this, layout);
return layout;
}
// TODO: Rename method, update argument and hook method into UI event
public void onButtonPressed(String uri) {
if (mListener != null) {
mListener.onSignUpFragmentInteraction(uri);
}
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
EventBus.getDefault().register(getActivity()); // Here comes the exception
if (context instanceof OnSignUpFragmentInteractionListener) {
mListener = (OnSignUpFragmentInteractionListener) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement OnSignUpFragmentInteractionListener");
}
}
@Override
public void onDetach() {
super.onDetach();
EventBus.getDefault().unregister(getActivity());
mListener = null;
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEvent(JSONObject response) {
Log.d(TAG, response.toString());
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEvent(VolleyError error) {
Log.d(TAG, error.toString());
}
}
Dies ist die Ausnahme, die ich
10-31 11:01:46.172 9047-9047/com.aam.skillschool E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.aam.skillschool, PID: 9047
org.greenrobot.eventbus.EventBusException: Subscriber class com.aam.skillschool.ui.activities.MainActivity and its super classes have no public methods with the @Subscribe annotation
at org.greenrobot.eventbus.SubscriberMethodFinder.findSubscriberMethods(SubscriberMethodFinder.java:67)
at org.greenrobot.eventbus.EventBus.register(EventBus.java:136)
at com.aam.skillschool.ui.fragments.SignUpFragment.onAttach(SignUpFragment.java:113)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1048)
at android.support.v4.app.BackStackRecord.setLastIn(BackStackRecord.java:838)
at android.support.v4.app.BackStackRecord.calculateFragments(BackStackRecord.java:878)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:719)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1682)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:541)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
Ich mache all dieses Zeug in Fragment, da ich all diese Funktionalität in Fragment –
möchte Die Ausnahme besagt, dass Sie Ihre Aktivität sowie \ anstelle des Fragments registriert haben. Wenn Sie keine @Subscribe-Anmerkungen in der Aktivität haben, sollten Sie sie nicht beim Ereignis-Bus registrieren. – Kuffs
Was ich gesagt habe, war korrekt, aber wenn Sie weiter nachsehen, verwenden Sie OnAttach in Ihrem Fragment, um die Aktivität zu registrieren. Bitte verwenden Sie OnPause/OnResume, um das Fragment zu registrieren und die Registrierung aufzuheben. – Kuffs