Friday, 9 August 2013

In Activity.onCreate(), why does Intent.getExtras() sometimes return null?

In Activity.onCreate(), why does Intent.getExtras() sometimes return null?

An activity has a button that takes the user to another activity. To
launch the new activity, we populate our Intent with extras, and
onCreate(), the new activity reads from those extras via
Intent.getExtras(). We assumed the returned bundle would be non-null, but
as customer crash reports discovered, getExtras() sometimes returns null.
Null-guarding the extras, as this answer shows, is perfectly fine, but if
you populate the intent's extras, then why would it ever return null
later? Is there a better place (like onResume()) to read the extras?
Here's the relevant code:
class FromActivity extends Activity {
ImageButton button;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
button = (ImageButton)findViewById(R.id.button);
button.setVisibility(View.VISIBLE);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(FromActivity.this, ToActivity.class);
// call i.putExtra()
startActivityForResult(i, 0);
overrideTransition(R.anim.slide_left_in,
R.anim.slide_left_out)
}
});
}
}
class ToActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle extras = getIntent().getExtras();
if (extras == null) {
finish();
return
}
// do stuff with extras
}
}

No comments:

Post a Comment