0

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

5 回答 5

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)可能就是您正在寻找的东西。

于 2012-08-07T13:36:38.037 回答
2

在你的.putExtra(),你把字符串“ROW_ID”。因此,您需要在下一个活动中从字符串“ROW_ID”中获取数据getExtras()

请注意,您的变量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()用于字符串。

于 2012-08-07T13:36:40.347 回答
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);
于 2012-08-07T13:40:32.013 回答
0

overlayItemList.get(index).getTitle()); 可能正在返回一个字符串并且您正在使用

rowID = extras.getLong(MyOverlays.ROW_ID); 

我不确定,但请尝试以下操作

rowID = extras.getStringExtra(MyOverlays.ROW_ID); 
于 2012-08-07T13:41:33.357 回答
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);

于 2021-01-19T15:50:00.620 回答