将Bundle / data发送到另一个类或屏幕

时间:2011-05-28 18:51:07

标签: java android views

我做错了什么?

我看了其他问题,并认为我做的事情完全相同,但由于它不适合我,显然我做错了什么!

我有MainActivity.class从网址获取JSON数据(坐标)。这部分有效。然后我想加载一个名为OverlayActivity.class的MapView,并将此数据发送到此地图,以便我可以使用叠加等填充它。 我拉下不同数量的点并动态创建按钮。根据单击的按钮,它会发送不同的数据。 这是这个循环的代码:

final LinearLayout layout = (LinearLayout) findViewById(R.id.menuLayout);
layout.removeAllViewsInLayout();
String itemName="";
int itemID=0;
for (int i = 0; i < dataSetsMap.size(); i++) {
    itemID=i+1;
    itemName=dataSetsMap.get(itemID);
    Button b = new Button(this);
    b.setText(itemName);
    layout.addView(b);

    // These need to be final to use them inside OnClickListener()
    final String tempName=itemName;
    final int tempID=itemID;

        b.setOnClickListener(new View.OnClickListener() {
              public void onClick(View v) {
                Intent i = new Intent();
                Bundle b = new Bundle();

                i.setClass(myContext, OverlayActivity.class);
                Log.i(TAG, "Setting extras: 1:"+tempName+" and 2:"+tempID);
            b.putInt(tempName, tempID);
                i.putExtras(b);
                startActivity(i);  
              }
          });
}   // End for()

所以很明显我想在另一边读取这些数据,假设我正确地发送它。所以,要阅读它,我一直在尝试一些不同的东西:

        //Method 1:
    String test1=intent.getStringExtra("name");
        String test2=intent.getStringExtra("id");

    //Method 2:
        String meh=getIntent().getExtras().getString("id").toString();
        String bleh=getIntent().getExtras().getString("name");

        //Method 3:
        String value=savedInstanceState.getString("name");
        String id=savedInstanceState.getString("id").toString();

        //Method 4:
        Bundle bundle = getIntent().getExtras();
        String id=bundle.getString("id"); 
        String value = getIntent().getExtras().getString("name");

我尝试使用这些方法时得到NullPointerException。这是我第一次使用这些类型的方法,所以有人能指出我正确的方向或告诉我哪里出错了吗?

2 个答案:

答案 0 :(得分:1)

首先,当你已经拥有Bundle b时使用Button b并不是一个好主意,如果没有其他原因,它会让人感到困惑,;)

其次,您不需要使用Bundle来传递字符串和int。只需将它们直接添加到您的Intent中......

Intent i = new Intent(myContext, OverlayActivity.class);
i.putExtra("name", tempName);
i.putExtra("id", tempID);
startActivity(i);  

要在OverlayActivity中检索它们,请使用...

Intent i = getIntent();
String name = i.getStringExtra("name");
int id = i.getIntExtra("id", -1); // -1 in this case is a default value to return if id doesn't exist

答案 1 :(得分:1)

为什么不这样做:

Intent i = new Intent();
                i.setClass(myContext, OverlayActivity.class);
                Log.i(TAG, "Setting extras: 1:"+tempName+" and 2:"+tempID);
            i.putExtra("name", tempName);
            i.putExtra("id", tempID);
                startActivity(i);  

然后您可以使用以下方式获取它们:

  String name = getIntent().getStringExtra("name", "");
  int id = getIntent().getIntExtra("id", 0);