Android中EditText值传至另一个布局TextView时程序崩溃求助
解决EditText值传递到另一个Activity TextView崩溃的问题
嘿,我来帮你搞定这个问题!你的程序崩溃核心原因是手动实例化MainActivity——Android里Activity的生命周期完全由系统管理,绝对不能自己new一个Activity对象,这样会导致里面的editText等控件根本没有被初始化,调用getText()的时候必然触发空指针异常,直接崩溃。
正确的做法是用Intent携带数据完成两个Activity之间的通信,这是Android组件间传值的标准方式,下面一步步教你修改:
第一步:修改MainActivity,通过Intent传递EditText内容
在启动SecondActivity的点击事件里,先获取EditText的文本,然后把它放到Intent中:
public class MainActivity extends AppCompatActivity { EditText editText; TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 高版本SDK无需强制类型转换 editText = findViewById(R.id.abc); textView = findViewById(R.id.go123); changeLayout(textView); } public void changeLayout(TextView textView){ textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 获取EditText输入的内容 String inputContent = editText.getText().toString(); // 创建Intent,同时携带数据 Intent intent = new Intent(MainActivity.this, SecondActivity.class); // 用自定义的键名存储数据,后面取数据要用到这个键 intent.putExtra("USER_INPUT", inputContent); startActivity(intent); } }); } }
⚠️ 注意:把原来的second类名改成SecondActivity,遵循Java大驼峰的命名规范,这是业界通用的代码风格。
第二步:修改SecondActivity,从Intent中取出数据并显示
删掉手动new MainActivity的代码,通过getIntent()获取启动当前Activity的Intent,再取出里面的数据:
public class SecondActivity extends AppCompatActivity { TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); textView = findViewById(R.id.qwe); // 获取传递过来的Intent Intent receivedIntent = getIntent(); // 根据之前定义的键名取出数据,设置默认值避免空指针 String inputText = receivedIntent.getStringExtra("USER_INPUT"); // 将数据设置到TextView上 textView.setText(inputText == null ? "" : inputText); } }
额外注意事项
- 确保你已经在
AndroidManifest.xml中注册了SecondActivity,如果没注册,启动Activity时会崩溃:<activity android:name=".SecondActivity"/> - 可以给EditText的内容加非空判断,比如用
TextUtils.isEmpty(inputContent)来处理空输入的情况,让程序更健壮。
内容的提问来源于stack exchange,提问作者Stary12
相关产品推荐
相关产品推荐

