I am new to EventBus. I want to pass the byteArray
to the next activity, I don't want to use intents because the byteArray
is large i will end up in out of memory error. I want to pass it through eventbus
.
While implementing event bus, I am getting an exception saying No subscribers registered for event class com.saikirans.eventbuspractise.MessageEvent
.
Thanks in advance.
MainActivity class:
public class MainActivity extends AppCompatActivity {
Intent intent;
Button button;
byte[] byteArray;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button);
Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.screen);
intent = new Intent(this, ReceiverActivity.class);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 100, stream);
byteArray = stream.toByteArray();
intent.putExtra("bitmap", byteArray);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(intent);
EventBus.getDefault().post(new MessageEvent("Hello everyone!"));
}
});
}
}
ReceiverActivity .class
public class ReceiverActivity extends AppCompatActivity {
ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_reciver);
byte[] byteArray = getIntent().getByteArrayExtra("bitmap");
Bitmap bitmap = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
imageView = (ImageView) findViewById(R.id.imageView);
assert imageView != null;
imageView.setImageBitmap(bitmap);
}
// This method will be called when a MessageEvent is posted
@Subscribe
public void onMessageEvent(MessageEvent event){
Toast.makeText(this, event.message, Toast.LENGTH_SHORT).show();
}
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
EventBus.getDefault().unregister(this);
super.onStop();
}
}
MessageEvent class:
public class MessageEvent {
public final String message;
public MessageEvent(String message) {
this.message = message;
}
}