putExtra不发送额外内容

时间:2012-08-07 13:33:46

标签: android

我正在尝试向下一个活动发送一些额外内容,但它根本不起作用,我不明白为什么。我正在用叠加填充地图,当点击时,我尝试将叠加项的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);

5 个答案:

答案 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)可能就是您要找的。

答案 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);