Exhaust Bus Subscription (Otto - Guava Event Bus)

Why the event is not signed, but onMyEvent not called. Relavent code is below. Otto works fine for my purposes, but the script below assumes placing an event from a callback handler (this is a simplification of the code that includes http calls). Not sure if this should do something about it.

I use Otto (based on the Guava event bus) and Dagger (Guice). Hope Java experts can also see any problem related to the way I enter and use the following bus.

Application (module registration)

 package com.example.ottocb; import android.app.Application; import android.content.Context; import com.squareup.otto.Bus; import dagger.Module; import dagger.ObjectGraph; import dagger.Provides; import javax.inject.Singleton; public class MyApplication extends Application { private ObjectGraph objectGraph; @Override public void onCreate() { super.onCreate(); objectGraph = ObjectGraph.create(new MyModule(this)); } public ObjectGraph objectGraph() { return objectGraph; } public void inject(Object object) { objectGraph.inject(object); } @Module(entryPoints = {Bus.class, MyActivity.class, MyFragment.class }) static class MyModule { private final Context appContext; MyModule(Context appContext) { this.appContext = appContext; } @Provides @Singleton Bus provideBus() { return new Bus(); } } } 

Basefragment

 package com.example.ottocb; import android.app.Fragment; import android.os.Bundle; public class BaseFragment extends Fragment { @Override public void onCreate(Bundle state) { super.onCreate(state); ((MyApplication) getActivity() .getApplication()) .inject(this); } } 

Myfragment

 package com.example.ottocb; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.Toast; import com.squareup.otto.Bus; import com.squareup.otto.Subscribe; import javax.inject.Inject; public class MyFragment extends BaseFragment { private static final String TAG = MyFragment.class.getName(); @Inject Bus bus; Button btn; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.myfragment, container, false); btn = (Button) view.findViewById(R.id.btn); btn.setOnClickListener(btnOnClick); return view; } Button.OnClickListener btnOnClick = new Button.OnClickListener() { @Override public void onClick(View v) { Log.i(TAG, "onClick"); MyCB cb = new MyCB(); cb.success(); } }; private class MyCB { public void success() { Log.i(TAG, "SUCCESS " ); bus.post(new MyEvent()); } public void failure() { Log.e(TAG, "Error"); } } @Subscribe public void onMyEvent(MyEvent event) { Log.i(TAG, "***** onMyEvent ********"); Toast.makeText(getActivity(), "***** RECEIVED EVENT *****", Toast.LENGTH_SHORT).show(); } } 

Myactivity

 package com.example.ottocb; import android.app.Activity; import android.os.Bundle; public class MyActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } } 

Myvent

 package com.example.ottocb; public class MyEvent { } 

main.xml

 <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment class="com.example.ottocb.MyFragment" android:id="@+id/myfragment" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout> 

myfragment.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Post" /> </LinearLayout> 
+4
source share
1 answer

To receive events, an instance of the class must register on the bus.

  bus.register(this); 
+15
source

All Articles