Kazu
Kazu

Reputation: 67

putExtra doesn't send the extras

I'm trying to send some extras to the next activity, but it simply does not work and I dont understand why. I'm populating a map with overlays and when clicked I try to send the ID of the overlay item to a new activity I get CursorIndexOutOfBounds.

  public static String ROW_ID = "row_id"; // Intent extra key

 protected boolean onTap(int index) {
    // TODO Auto-generated method stub
    // return super.onTap(index);


    ROW_ID = overlayItemList.get(index).getTitle();

    Intent intent = new Intent(context, ViewContactFromMap.class);
    intent.putExtra("ROW_ID", overlayItemList.get(index).getTitle());

    Log.e("putExtra", "ROW_ID is " + ROW_ID);

    context.startActivity(intent);
    return true;
}

Here Log.e outputs the id of the item that's clicked. Example 29.

But in my next activity I try to open the Log.e, but it shows the value 0 and that's why I get the CursorIndexOutOfBounds. But why isn't it picking up the value 29?

        // get the selected contact's row ID
    Bundle extras = getIntent().getExtras();
    rowID = extras.getLong(MyOverlays.ROW_ID);

    Log.e("ViewContactFromMap", "rowID is: " + rowID);

Even if I hardcode and set the ROW_ID to 29, I still get the value of 0 in my next activity


After the help I got from these people below, I got it to work with this:

    ROW_ID = overlayItemList.get(index).getTitle();

    Intent intent = new Intent(context, ViewContactFromMap.class);
    intent.putExtra("ROW_ID", overlayItemList.get(index).getTitle());

    Log.e("putExtra", "ROW_ID is " + ROW_ID);

    context.startActivity(intent);

        // get the selected contact's row ID
    Bundle extras = getIntent().getExtras();
    rowIDs = extras.getString("ROW_ID");

    rowID = Long.parseLong(rowIDs); 
    Log.e("ViewContactFromMap", "rowID is: " + rowID);

Upvotes: 0

Views: 947

Answers (5)

cinobili19
cinobili19

Reputation: 461

Intent in = new Intent(this, XXX.class);
in.putExtra("testExtra", "TestData");
startActivity(in);

Same problem happened to me. And I solved this problem adding following :

Intent in = new Intent(this, XXX.class);
in.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
in.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
in.putExtra("testExtra", "TestData");
startActivity(in);

Upvotes: 0

Frohnzie
Frohnzie

Reputation: 3569

Remove the quotes around ROW_ID intent.putExtra(ROW_ID, overlayItemList.get(index).getTitle());

or

Change the case of ROW_ID public static String ROW_ID = "ROW_ID";

EDIT: Also make sure your types are the same. getTitle may actually be a String. In that case getString(MyOverlays.ROW_ID) may be what you are looking for.

Upvotes: 2

Mxyk
Mxyk

Reputation: 10698

In your .putExtra(), you are putting the String "ROW_ID". Thus, you need to grab the data from the String "ROW_ID" in your next activity in getExtras().

Note that your variable ROW_ID's value is "row_id", but you are placing the value into "ROW_ID". Try using all uppercase or all lowercase - these things are case sensitive.

Explanation: you are storing a variable using .putExtra() into the tag "ROW_ID". Then, in the other activity, you are trying to grab the value using .getLong() from the variable ROW_ID, whose value is "row_id". Do you see the problem now? Value stored as "ROW_ID", trying to receive it as "row_id"... these tags are not the same. As a result, .getLong() cannot find the value and thus just makes it 0.

Short answer: change your variable to public static String ROW_ID = "ROW_ID"; and ensure that the variable you are really trying to get is a long. If you're storing an integer, use .getInt() instead, or .getString() for a String.

Upvotes: 2

Umesh
Umesh

Reputation: 4256

overlayItemList.get(index).getTitle()); is probably returning a string and you are using

rowID = extras.getLong(MyOverlays.ROW_ID); 

I am unsure but try the following

rowID = extras.getStringExtra(MyOverlays.ROW_ID); 

Upvotes: 0

Furqi
Furqi

Reputation: 2403

 public static String ROW_ID = "row_id"; // Intent extra key
private Context c;  

 protected boolean onTap(int index) {
Intent intent = new Intent(c, ViewContactFromMap.class);
                    intent.putExtra(ROW_ID, overlayItemList.get(index).getTitle());
                    c.startActivity(intent); 
}


// get the selected contact's row ID
    Bundle extras = getIntent().getExtras();
    rowID = extras.getLong(MyOverlays.ROW_ID);

    Log.e("ViewContactFromMap", "rowID is: " + rowID);

Upvotes: 0

Related Questions