因此,我在主要活动中有一个回收站视图,一旦我击中一个元素,便可以转到另一个屏幕并使用捆绑包发送信息(例如,单击的回收站视图中的元素名称)。一切正常。
现在,我正尝试回到主要活动并将信息发送到将在Toast中显示的主要活动
这是我第二回活动中的一部分
public void onClick(View view) {
String text1 = "";
Bundle bundle = new Bundle();
bundle.putString("xyz1",editText.getText().toString());
Intent returnIntent = new Intent(view.getContext(),MainActivity.class);
returnIntent.putExtras(bundle);
view.getContext().startActivity(returnIntent);
}
这是我在oncreate方法中检索它的主要活动中的内容
//Bundle bundle = this.getIntent().getExtras();
//String value = bundle.getString("xyz1");
//Toast.makeText(this,value,Toast.LENGTH_SHORT).show();
我有评论,因为它崩溃了。我的猜测是由于第一次启动该程序而导致崩溃,没有捆绑包,也没有来自第二个活动的信息。
我可以用另一种方式(从主要活动到第二项活动)
如何处理?
答案 0 :(得分:0)
在访问捆绑软件中的参数之前,请尝试执行空检查。
private static final String EXTRA_MY_STRING = "xyz1";
if (getIntent().getExtras() != null)
{
Bundle extras = getIntent().getExtras();
String value = extras.getString(EXTRA_MY_STRING);
if (!TextUtils.isEmpty(value))
{
// show Toast
}
}
此外,它有助于发布日志,以便我们可以查看崩溃的原因。
答案 1 :(得分:0)
您可以通过几种不同的方式对其进行存档,
您的FirstActivity(尚不清楚活动的名称是什么),您应该像这样使用它。
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
EditText nameText = (EditText) findViewById(R.id.query_textbox);
intent.putExtra("key", nameText.getText());
startActivity(intent);
这是我解决问题的方法。我认为它的格式是最好的,并且其他可能正在阅读您代码的人也很容易理解(遵循良好的编程格式)
然后在您的SecondActivity.class内部(我认为您应该是MainActivity.class)
Bundle extras = getIntent().getExtras();
if (extras != null) {
String extraStr = extras.getString("key");
}else {
extraStr = "extra not set";
}
如果您想使用格式正确的代码,应该像这样
Intent intent = getIntent();
// Get the extras (if there are any)
Bundle extras = intent.getExtras();
if (extras != null) {
if (extraStr.containsKey("key")) {
String extraStr = extras.getString("key");
// TODO: Do something.
}
}
或还可以使用Intent方法直接访问您的附加内容。
String extraStr = getIntent().getExtras("key");
我将在此处附加一些参考,如果您愿意的话,它们将帮助您获得更多的了解。谢谢。
参考文献:http://ausmarton.blogspot.com/2014/01/bundle-containskey-but-returns-null-on.html
https://www.codota.com/code/java/methods/android.os.Bundle/containsKey