我正在尝试将Bundle从第二个活动传递到第一个(启动)活动。为了不在启动时获取NPE,我正在检查是否bundle!= null,但是,看起来,就像从Bundle的第二个活动返回后,它仍然没有运行" if"身体。 这是我的第一个活动代码的一部分
Bundle bundle = getIntent().getExtras();
if (bundle!=null) {
Player player = new Player();
player.setStatus(bundle.getInt("Status"));
player.setName(bundle.getString("Name"));
addPlayerToList(player);
Log.e("Player with a name " + player.getName(), "Has been created");
}
第二项活动的代码
submitButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
name = nameEditText.getText().toString();
if (defaultRadioButton.isChecked()) {
status=0;
} else if (driverRadioButton.isChecked()) {
status=1;
} else {
Toast.makeText(getApplicationContext(), "Suka viberi galochku", Toast.LENGTH_SHORT).show();
}
Intent i = new Intent(getApplicationContext(),StartActivity.class);
Bundle bundle = new Bundle();
bundle.putInt("Status",status);
bundle.putString("Name", name);
Log.d("Object " + name, "Status: " + status);
startActivity(i);
}
});
感谢您提供任何帮助/建议
答案 0 :(得分:0)
尝试Intent.putExtra()
而不是将数据放入数据包中,并使用Intent.getStringExtra()
获取字符串数据;
答案 1 :(得分:0)
在您的代码中,没有代码可以将bundle
放入intent
。实际上你从未将包传递给第一个活动。您可以使用此answer来解决您的问题。
答案 2 :(得分:0)
在这种情况下使用startActivityForResult()
。
1)您使用此方法打开第一个活动,而不是startActivity()
2)在第二项活动中做任何你想做的事
3)设置结果包
4)完成活动
5)在第一个活动中打开包
在您的情况下,它将如下所示:
1)像这样召唤第二项活动:
Intent i = new Intent(this, SecondActivity.class);
startActivityForResult(i, REQUEST_SECOND_ACTIVITY); // request code const
2-4)
submitButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
name = nameEditText.getText().toString();
if (defaultRadioButton.isChecked()) {
status=0;
} else if (driverRadioButton.isChecked()) {
status=1;
} else {
Toast.makeText(getApplicationContext(), "Suka viberi galochku", Toast.LENGTH_SHORT).show();
}
final Intent returnIntent = new Intent();
returnIntent.putExtra("Status", status); // set values
returnIntent.putExtra("Name", name);
setResult(Activity.RESULT_OK, returnIntent); // set result code
finish(); // finish this activity and go back to the previous one
}
});
5)在第一个活动中重写此方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(requestCode) {
case REQUEST_SECOND_ACTIVITY: // same request code const
if(resultCode == Activity.RESULT_OK){
Player player = new Player();
player.setStatus(data.getIntExtra("Status"));
player.setName(data.getStringExtra("Name"));
addPlayerToList(player);
}
break;
}
}