You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中Activity传值时App崩溃问题求助

问题分析与修复方案

核心崩溃原因

  1. 控件ID不匹配:MainActivity中查找EditText时用了edtPhone、edtMessage,但布局文件里的实际ID是editTextPhone、editTextTextPersonName,导致findViewById返回null,点击按钮调用getText()触发空指针异常。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 09:35:16