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

Android开发:使用Intent.getStringExtra传递数据时遇错误

Android Activity传值报错问题分析与解决

第一个Activity代码

package com.example.onlinefoodordermobileapp;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

    //public void DisplayMenu(View view){
    //    Intent intent=new Intent(this,Menu.class);
    //    startActivity(intent);
    //}
    public void PlaceOrder(View view){
        public final static String MSG = "ORDER";
        EditText editText1 = findViewById(R.id.editText1);
        EditText editText2 = findViewById(R.id.editText);
        EditText editText3 = findViewById(R.id.editText2);
        String message = editText1.getText()+", "
                        +editText2.getText()+" and "
                        + editText3.getText()+" added to Cart";
        Intent intent=new Intent(this,placeOrder.class);
        intent.putExtra(MSG,message.toString());
        startActivity(intent);
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

第二个Activity代码

package com.example.onlinefoodordermobileapp;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class placeOrder extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_place_order);
        Intent intent=getIntent();
        String message=intent.getStringExtra(MainActivity.MSG);
        TextView textView=findViewById(R.id.textView3);
        textView.setText(message);
    }
}

问题描述

  • 第一个Activity中,定义public static final String MSG = "ORDER";时,public和static标记报错;
  • 第二个Activity调用intent.getStringExtra(MainActivity.MSG)时,MSG也报错。

错误原因与解决方法

错误根源

  1. 第一个Activity的问题:你把MSG定义在了PlaceOrder方法内部。Java语法规定:方法内部不能声明静态成员变量,同时局部变量不允许用public这类访问修饰符修饰——局部变量仅作用于方法内部,不需要也不支持访问权限修饰。
  2. 第二个Activity的问题:因为第一个Activity的MSG不是类的成员变量,第二个Activity无法通过MainActivity.MSG访问到这个常量,因此报错。

修正步骤

  1. 调整第一个Activity中MSG的位置:将MSG移到MainActivity类内部、所有方法外部,作为类的静态常量,这样其他Activity才能正常访问:
package com.example.onlinefoodordermobileapp;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {
    // 把MSG移至此处,作为类的静态成员
    public static final String MSG = "ORDER";

    //public void DisplayMenu(View view){
    //    Intent intent=new Intent(this,Menu.class);
    //    startActivity(intent);
    //}
    public void PlaceOrder(View view){
        EditText editText1 = findViewById(R.id.editText1);
        EditText editText2 = findViewById(R.id.editText);
        EditText editText3 = findViewById(R.id.editText2);
        String message = editText1.getText()+", "
                        +editText2.getText()+" and "
                        + editText3.getText()+" added to Cart";
        Intent intent=new Intent(this,placeOrder.class);
        intent.putExtra(MSG,message.toString());
        startActivity(intent);
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}
  1. 第二个Activity无需修改:只要第一个Activity的MSG定义正确,MainActivity.MSG就能被正常访问,报错会自动消失。

额外建议:Android Activity类名遵循Java大驼峰命名规范,建议把placeOrder改为PlaceOrder,避免潜在的命名冲突问题。

内容的提问来源于stack exchange,提问作者Mahad Bin Naeem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:45:41