Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Bundle is null after setting it in Intent

I know there are questions like: android-intent-bundle-always-null and intent-bundle-returns-null-every-time but there is no correct answer.

In my Activity 1:

public void goToMapView(Info info) {
    Intent intent = new Intent(getApplicationContext(), MapViewActivity.class);
    //intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
    intent.putExtra("asdf", true);
    info.write(intent);
    startActivity(intent);
}

In Info:

public void write(Intent intent) {
    Bundle b = new Bundle();
    b.putInt(AppConstants.ID_KEY, id);
    ... //many other attributes
    intent.putExtra(AppConstants.BUNDLE_NAME, b);
}
public static Info read(Bundle bundle) {
    Info info = new Info();
    info.setId(bundle.getInt(AppConstants.ID_KEY));
    ... //many other attributes
    return info;
}

In MapViewActivity (Activity 2):

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.map_view);

    Bundle extras = getIntent().getBundleExtra(AppConstants.BUNDLE_NAME);
    info = Info.read(extras);
    ...
}

Problem is that extras bundle is always null. I have debugged it and Intent (intent = getIntent()) has all fields set to null except one indicating what class this is (MapViewActivity).

I've also tried putting the bundle via intent.putExtras(b) with the same effect. The intent.putExtra("asdf", true) is for debugging reasons only - I cannot get this data too (because getIntent() has almost all fields set to null).

EDIT

The answers below are correct and working. This was my fault. I didn't correctly passed my bundle to new intent.

like image 394
Xeon Avatar asked Apr 11 '12 14:04

Xeon


People also ask

What is difference between intent and bundle?

Bundles are used with intent and values are sent and retrieved in the same fashion, as it is done in the case of Intent. It depends on the user what type of values the user wants to pass, but bundles can hold all types of values (int, String, boolean, char) and pass them to the new activity.

How do I bundle intent?

Using putExtra() We can start adding data into the Intent object, we use the method defined in the Intent class putExtra() or putExtras() to store certain data as a key value pair or Bundle data object. These key-value pairs are known as Extras in the sense we are talking about Intents.

What is the putExtra () method used with intent for?

putExtra() method is used for sending the data, data in key-value pair key is variable name and value can be Int, String, Float, etc.

Is intent deprecated?

content. intent' is deprecated. I found some threads regarding the usage of getIntent() but I am creating a new intent in my case in a RecyclerViewAdapter to open a new Activity.


2 Answers

I am not sure what "Info" is for, but I suggest making the most basic passing of data from one activity to another first before involving other data objects.

Activity1

    Intent intent = new Intent(Activity1.this, Activity2.class);
    intent.putExtra("asdf", true);
    info.write(intent);
    startActivity(intent);

Activity2

    Bundle bundle = getIntent.getExtras();
    if (bundle!=null) {
        if(bundle.containsKey("asdf") {
            boolean asdf = bundle.getBooleanExtra("asdf");
            Log.i("Activity2 Log", "asdf:"+String.valueOf(asdf));
        }
    } else {
        Log.i("Activity2 Log", "asdf is null");

    }
like image 141
Mark Pazon Avatar answered Oct 13 '22 19:10

Mark Pazon


Activity 1

Intent intent = new Intent(getApplicationContext(), MapViewActivity.class);

        Bundle b = new Bundle();
         b.putBoolean("asdf", true);
         b.putInt(AppConstants.ID_KEY, id);
         intent.putExtras(b);

         startActivity(intent);

Activity 2

Bundle extras = getIntent().getExtras();

 boolean bool = extras.getBoolean("asdf");
 int m_int = extras.getInt(AppConstants.ID_KEY,-1);
like image 38
Ravi1187342 Avatar answered Oct 13 '22 20:10

Ravi1187342