Reputation: 67
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
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
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
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
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
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