我正在尝试向下一个活动发送一些额外内容,但它根本不起作用,我不明白为什么。我正在用叠加填充地图,当点击时,我尝试将叠加项的ID发送到我获得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;
}
这里Log.e输出被点击的项目的ID。例29。
但在我的下一个活动中,我尝试打开Log.e,但它显示的值为0,这就是我获得CursorIndexOutOfBounds的原因。但为什么它没有拿到29的值呢?
// get the selected contact's row ID
Bundle extras = getIntent().getExtras();
rowID = extras.getLong(MyOverlays.ROW_ID);
Log.e("ViewContactFromMap", "rowID is: " + rowID);
即使我硬编码并将ROW_ID设置为29,我仍然会在下一个活动中获得值0
在我从下面的这些人那里获得帮助后,我得到了它的工作:
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);
答案 0 :(得分:2)
删除ROW_ID intent.putExtra(ROW_ID, overlayItemList.get(index).getTitle());
或
更改ROW_ID public static String ROW_ID = "ROW_ID";
修改强>
还要确保您的类型相同。 getTitle
实际上可能是String
。在这种情况下,getString(MyOverlays.ROW_ID)
可能就是您要找的。 p>
答案 1 :(得分:2)
在.putExtra()
中,您将字符串“ROW_ID”。因此,您需要在getExtras()
的下一个活动中从字符串“ROW_ID”中获取数据。
请注意,您的变量ROW_ID
的值为“row_id”,但您将值放入“ROW_ID”。尝试使用全部大写或全部小写 - 这些都区分大小写。
说明:您使用.putExtra()
将变量存储到标记“ROW_ID”中。然后,在其他活动中,您尝试使用变量.getLong()
中的ROW_ID
来获取值,其值为“row_id”。你现在看到了问题吗?值存储为“ROW_ID”,尝试将其作为“row_id”接收......这些标记不一样。因此,.getLong()
无法找到该值,因此只能将其设为0。
简短回答:将您的变量更改为public static String ROW_ID = "ROW_ID";
并确保您真正想要获得的变量很长。如果您要存储整数,请改为使用.getInt()
,或使用.getString()
作为字符串。
答案 2 :(得分:0)
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);
答案 3 :(得分:0)
overlayItemList.get(指数).getTitle());可能正在返回一个字符串而你正在使用
rowID = extras.getLong(MyOverlays.ROW_ID);
我不确定但请尝试以下
rowID = extras.getStringExtra(MyOverlays.ROW_ID);
答案 4 :(得分:0)
Intent in = new Intent(this, XXX.class);
in.putExtra("testExtra", "TestData");
startActivity(in);
我也遇到了同样的问题。我解决了这个问题,添加了以下内容:
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);