Android通过Intent传递变量至其他类识别不到name变量如何解决
问题原因
你的代码存在两处核心错误,共同导致了MainActivity2中取值报错:
- MainActivity中创建了存储姓名的Bundle对象,但未将该Bundle绑定到跳转用的Intent实例上,导致MainActivity2获取到的
receiverBundle为空,调用getString方法时触发空指针异常。 - 读取输入框内容的时机错误:你在MainActivity的
onCreate生命周期就执行了name.getText().toString(),此时页面刚完成初始化,用户还未输入任何内容,就算参数传递成功也只会拿到空字符串,应该在点击按钮的回调中再读取输入框的实时内容。
修正后的代码
1. MainActivity.java
import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; public class MainActivity extends AppCompatActivity { EditText name; Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); name = findViewById(R.id.name); button = findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 点击按钮时再读取输入框内容 String nameInString = name.getText().toString(); Intent senderIntent = new Intent(getApplicationContext(), MainActivity2.class); Bundle senderBundle = new Bundle(); senderBundle.putString("name", nameInString); // 把Bundle绑定到Intent上 senderIntent.putExtras(senderBundle); startActivity(senderIntent); } }); } }
2. MainActivity2.java(可选优化,增加空判避免崩溃)
import android.content.Intent; import android.os.Bundle; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; public class MainActivity2 extends AppCompatActivity { TextView resultName; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); resultName = findViewById(R.id.nameReceived); Intent receiverIntent = getIntent(); Bundle receiverBundle = receiverIntent.getExtras(); String receivedName = "未获取到输入内容"; // 增加空判,避免Bundle为空时崩溃 if (receiverBundle != null) { receivedName = receiverBundle.getString("name"); } resultName.setText(receivedName); } }
修改完成后重新运行项目,输入姓名点击发送,MainActivity2即可正常展示获取到的姓名。
内容的提问来源于stack exchange,提问作者Michael Smith
相关产品推荐
相关产品推荐

