我做错了什么?
我看了其他问题,并认为我做的事情完全相同,但由于它不适合我,显然我做错了什么!
我有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
。这是我第一次使用这些类型的方法,所以有人能指出我正确的方向或告诉我哪里出错了吗?
答案 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);