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也报错。
错误原因与解决方法
错误根源
- 第一个Activity的问题:你把
MSG定义在了PlaceOrder方法内部。Java语法规定:方法内部不能声明静态成员变量,同时局部变量不允许用public这类访问修饰符修饰——局部变量仅作用于方法内部,不需要也不支持访问权限修饰。 - 第二个Activity的问题:因为第一个Activity的
MSG不是类的成员变量,第二个Activity无法通过MainActivity.MSG访问到这个常量,因此报错。
修正步骤
- 调整第一个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); } }
- 第二个Activity无需修改:只要第一个Activity的
MSG定义正确,MainActivity.MSG就能被正常访问,报错会自动消失。
额外建议:Android Activity类名遵循Java大驼峰命名规范,建议把placeOrder改为PlaceOrder,避免潜在的命名冲突问题。
内容的提问来源于stack exchange,提问作者Mahad Bin Naeem
相关产品推荐
相关产品推荐

