java - 如何通过一个按钮将 EditText 值传递给两个不同的活动?
问题描述
所以我想使用一个按钮(提交按钮)将 EditText 值传递给两个不同的活动。从逻辑上讲,我做的一切都是正确的,但它不起作用,我不知道为什么。我认为这行不通。这是我的第一个活动代码:
public class TwoTeam extends AppCompatActivity {
EditText first_name, second_name;
String name_first, name_second;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_two_team);
first_name = findViewById(R.id.first_name);
second_name = findViewById(R.id.second_name);
}
public void submit_button(View view) {
Intent intent = new Intent(TwoTeam.this, Begin.class);{
name_first = first_name.getText().toString();
name_second = second_name.getText().toString();
intent.putExtra("name1", name_first);
intent.putExtra("name2", name_second);
intent.putExtra("turn1", name_first + "'s Turn");
startActivity(intent);
}
Intent in = new Intent(TwoTeam.this, Begindup.class);{
name_first = first_name.getText().toString();
name_second = second_name.getText().toString();
in.putExtra("name1dup", name_first);
in.putExtra("name2dup", name_second);
in.putExtra("turn2", name_second + "'s Turn");
}
}
}
这是我的第二个活动代码:
public class Begin extends AppCompatActivity {
private TextView first_name, second_name, first_turn, words;
String name_first, name_second, turn_first;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_begin);
first_name = findViewById(R.id.name_first);
second_name = findViewById(R.id.name_second);
first_turn = findViewById(R.id.first_turn);
name_first = getIntent().getExtras().getString("name1");
first_name.setText(name_first);
name_second = getIntent().getExtras().getString("name2");
second_name.setText(name_second);
turn_first = getIntent().getExtras().getString("turn1");
first_turn.setText(turn_first);
}
}
这是我的第三个活动代码:
public class Begindup extends AppCompatActivity {
private TextView first_name, second_name, second_turn, words;
String name_first, name_second, turn_second;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_begindup);
first_name = findViewById(R.id.name_first);
second_name = findViewById(R.id.name_second);
second_turn = findViewById(R.id.second_turn);
name_first = getIntent().getExtras().getString("name1dup");
first_name.setText(name_first);
name_second = getIntent().getExtras().getString("name2dup");
second_name.setText(name_second);
turn_second = getIntent().getExtras().getString("turn2");
second_turn.setText(turn_second);
}
}
错误输出是这样的:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference
有时这也是:
Unknown bits set in runtime_flags: 0x8000
解决方案
可能缺少代码信息。我认为 NPE 发生在内部Begin.class
,对吧?
您可以尝试直接使用getIntent().getStringExtra("name1");
而不是getIntent().getExtras().getString("name1");
. 这样,您的代码不再需要检索 Bundle 对象(可能为空),而是直接检索您需要的额外字符串。
推荐阅读
- node.js - 在 discord.js v12 的终端中运行命令
- google-apps-script - Apps 脚本中托管的书签在共享时无法运行
- html - 如何在另一个 HTML 块级元素上重叠 HTML 块级元素,同时保持跨屏幕尺寸的响应行为
- html - Bootstrap 5 mobile Dropdown在单击时不滑动
- jsf - Primefaces 表单提交
- swift - 快速添加共享子菜单
- charm-crypto - 如何使用 Charm-Crypto 启动复合订单双线性对?
- reactjs - 如果组件在 react-testing-library 开头返回空数组,如何测试组件?
- multidimensional-array - for语句中的索引在c ++中分配内存后更改值
- javascript - 如何隐藏特定图表的图例显示?