Android Studio中Activity传值时App崩溃问题求助
问题分析与修复方案
核心崩溃原因
- 控件ID不匹配:MainActivity中查找EditText时用了
edtPhone、edtMessage,但布局文件里的实际ID是editTextPhone、editTextTextPersonName,导致findViewById返回null,点击按钮调用getText()触发空指针异常。 - ActivityTwo布局错误:你贴的
activity_two.xml和activity_main.xml完全重复,缺少用于显示数据的txtPhone、txtMessage控件,ActivityTwo中查找这些TextView时会返回null,调用setText()同样触发空指针异常。
修复步骤
1. 修正MainActivity.java
把EditText的查找ID改为布局中的实际值,并将控件初始化移到onCreate中(避免重复查找):
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 { Intent outIntent; EditText edtPhone; EditText edtMessage; Button btnNext; String tempText=""; public static final String PHONE = "PHONE"; public static final String MESSAGE = "MESSAGE"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化所有控件到onCreate中 btnNext = findViewById(R.id.btnNext); edtPhone = findViewById(R.id.editTextPhone); // 匹配布局中的ID edtMessage = findViewById(R.id.editTextTextPersonName); // 匹配布局中的ID btnNext.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View V) { outIntent = new Intent(MainActivity.this, ActivityTwo.class); tempText = edtPhone.getText().toString(); outIntent.putExtra(PHONE,tempText); tempText = edtMessage.getText().toString(); outIntent.putExtra(MESSAGE,tempText); startActivity(outIntent); } }); } public void closeMethod(View view) { finish(); } }
2. 修正ActivityTwo的布局文件(activity_two.xml)
替换为专门用于显示数据的布局:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".ActivityTwo"> <TextView android:id="@+id/textViewPhone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="32dp" android:layout_alignParentStart="true" android:text="Phone:" /> <TextView android:id="@+id/txtPhone" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="60dp" android:layout_alignParentStart="true" android:paddingStart="8dp" /> <TextView android:id="@+id/textViewMessage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="124dp" android:layout_alignParentStart="true" android:text="Message:" /> <TextView android:id="@+id/txtMessage" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="156dp" android:layout_alignParentStart="true" android:paddingStart="8dp" /> <Button android:id="@+id/btnBack" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_marginTop="224dp" android:text="Back" android:onClick="goBack"/> </RelativeLayout>
3. 优化ActivityTwo.java(可选,增加空值处理)
添加返回按钮逻辑,并处理可能的空值(避免极端情况崩溃):
package com.example.fir; import android.content.Intent; import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import android.view.View; import android.widget.TextView; public class ActivityTwo extends AppCompatActivity { Intent incomingIntent; TextView txtPhone; TextView txtMessage; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_two); incomingIntent = getIntent(); txtPhone = findViewById(R.id.txtPhone); txtMessage = findViewById(R.id.txtMessage); // 处理空值,避免setText(null)的潜在问题 String phone = incomingIntent.getStringExtra(MainActivity.PHONE); String message = incomingIntent.getStringExtra(MainActivity.MESSAGE); txtPhone.setText(phone == null ? "" : phone); txtMessage.setText(message == null ? "" : message); } public void goBack(View view) { finish(); } }
内容的提问来源于stack exchange,提问作者ahmed magdy
相关产品推荐
相关产品推荐

