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

如何实现Android应用重启后直接打开带已存数据的MainMenu

实现Android应用启动直接跳转至带已保存数据的MainMenu界面

需求说明

已实现功能:在MainActivity中输入身高、体重、年龄并选择性别后,点击按钮可跳转至MainMenu展示对应数据。
待实现功能:输入数据保存并关闭应用后,再次启动应用时直接打开MainMenu并显示已保存的用户数据。

现有代码

MainActivity.java

public class MainActivity extends AppCompatActivity {
EditText enterHeight, enterWeight, enterAge;

private double height;
private double weight;
private double age;
String selectedRadiobut;
Button button;
RadioButton radioMale, radioFemale;
RadioGroup radioGroup;
SharedPreferences sp;
private boolean heightIsValid() {

    if (enterHeight.getText().toString().length() == 0) {
        enterHeight.setError("Cant be empty");
        return false;
    }

    double height = Double.valueOf(enterHeight.getText().toString());

    if (height <= 0) {

        enterHeight.setError("Cant be zero");
        return false;
    }
    if (height <= 40 || height > 250) {

        enterHeight.setError("Cant be less than 40 cm or more than 250 cm");
        return false;
    }
    return true;
}
private boolean weightIsValid() {
    if (enterWeight.getText().toString().length() == 0) {
        enterWeight.setError("Cant be empty");
        return false;
    }

    double weight = Double.valueOf(enterWeight.getText().toString());

    if (weight <= 0) {

        enterWeight.setError("Cant be zero");
        return false;
    }
    if (weight > 600) {

        enterWeight.setError("Cant be more than 600 kg");
        return false;
    }
    return true;
}
private boolean ageIsValid() {
    if (enterAge.getText().toString().length() == 0) {
        enterAge.setError("Cant be empty");
        return false;
    }

    double age = Double.valueOf(enterAge.getText().toString());

    if (age <= 0) {

        enterAge.setError("Cant be zero");
        return false;
    }
    if (age > 116) {

        enterAge.setError("Cant be older than 116 years");
        return false;
    }
    return true;
}
private boolean genderIsSelected() {

    if (radioGroup.getCheckedRadioButtonId() == -1) { //checking if the user has selected a option using id
        Toast toast = Toast.makeText(this, "Please select gender", Toast.LENGTH_SHORT);
        toast.show();
        return false;
    }
    if (radioMale.isChecked()) {
        selectedRadiobut = radioMale.getText().toString();
    }
    else if (radioFemale.isChecked()) {
        selectedRadiobut = radioFemale.getText().toString();
    }
    return true;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getSupportActionBar().hide();
    setContentView(R.layout.activity_main);
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

    radioMale = (RadioButton) findViewById(R.id.radioMale);
    radioFemale = (RadioButton) findViewById(R.id.radioFemale);
    button = (Button) findViewById(R.id.button);
    enterHeight = (EditText) findViewById(R.id.enterHeight);
    enterWeight = (EditText) findViewById(R.id.enterWeight);
    enterAge = (EditText) findViewById(R.id.enterAge);
    radioGroup = (RadioGroup) findViewById(R.id.radioSex);

    sp = getSharedPreferences("MyUserPrefs", Context.MODE_PRIVATE);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {


            if (heightIsValid() & weightIsValid() & ageIsValid() & genderIsSelected()) {

                height = Double.valueOf(enterHeight.getText().toString());
                weight = Double.valueOf(enterWeight.getText().toString());
                age = Double.valueOf(enterAge.getText().toString());

                SharedPreferences.Editor editor = sp.edit();
                editor.putString("height" , String.valueOf(Integer.valueOf((int) height)));
                editor.putString("weight" , String.valueOf(Integer.valueOf((int) weight)));
                editor.putString("age" , String.valueOf(Integer.valueOf((int) age)));
                editor.putString("gender", String.valueOf(selectedRadiobut));
                editor.commit();

                InputMethodManager imm = (InputMethodManager) getSystemService(getApplicationContext().INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
                Intent intent = new Intent(MainActivity.this, MainMenu.class);
                startActivity(intent);
            }
        }
    });
}
}
public class MainMenu extends AppCompatActivity {
Button  btnMC , btnFN , btnRec , btnGuides;
    public void btnStepClick(View view) {
        Intent intent = new Intent(this, StepCounter.class);
        startActivity(intent);
    }
    public void btnCalClick(View view) {
        Intent intent = new Intent(this, MacrosCalculator.class);
        startActivity(intent);
    }
    public void btnRecClick(View view){
        Intent intent = new Intent(this, Recipes.class);
        startActivity(intent);
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getSupportActionBar().hide();
        setContentView(R.layout.activity_main_menu);
        TextView age1 , height1 , weight1 , gender1;

        age1 = (TextView) findViewById(R.id.age1);
        height1 = (TextView) findViewById(R.id.height1);
        weight1 = (TextView) findViewById(R.id.weight1);
        gender1 = (TextView) findViewById(R.id.gender1);
        btnMC = (Button) findViewById(R.id.btnMC);
        btnFN = (Button) findViewById(R.id.btnFN);
        btnRec = (Button) findViewById(R.id.btnRec);
        btnGuides = (Button) findViewById(R.id.btnGuides);

        SharedPreferences sp = getApplicationContext().getSharedPreferences("MyUserPrefs", Context.MODE_PRIVATE);
        String height = sp.getString("height" , "");
        String weight = sp.getString("weight" , "");
        String age = sp.getString("age" , "");
        String gender= sp.getString("gender", "");

        gender1.setText("Gender: " + gender);
        age1.setText("Age: " + age);
        height1.setText("Height(cm): " + height);
        weight1.setText("Weight(kg): " + weight);


    }
}

解决方案

核心思路

在应用启动入口(MainActivity)的初始化阶段,先检查SharedPreferences中是否存在已保存的有效用户数据。如果存在,直接跳转到MainMenu并关闭当前MainActivity;如果不存在,则正常显示输入界面。

修改步骤

  1. 添加启动时的数据检查逻辑
    在MainActivity的onCreate方法中,初始化SharedPreferences后、初始化控件之前,加入数据判断代码:
sp = getSharedPreferences("MyUserPrefs", Context.MODE_PRIVATE);
// 检查是否有已保存的有效身高数据(非空即表示数据已完整保存)
String savedHeight = sp.getString("height", "");
if (!savedHeight.isEmpty()) {
    Intent intent = new Intent(MainActivity.this, MainMenu.class);
    startActivity(intent);
    finish(); // 关闭MainActivity,避免返回键回到输入界面
    return;
}
  1. (可选)优化数据存储类型
    目前代码将数值转成String存储,可改为直接存储整数类型,提升效率和判断准确性:
  • 存储逻辑修改:
// 替换原有editor.putString相关代码
editor.putInt("height", (int) height);
editor.putInt("weight", (int) weight);
editor.putInt("age", (int) age);
editor.putString("gender", selectedRadiobut);
editor.apply(); // 用apply替代commit,异步提交更高效
  • MainMenu中的读取逻辑修改:
// 替换原有sp.getString相关代码
int height = sp.getInt("height", 0);
int weight = sp.getInt("weight", 0);
int age = sp.getInt("age", 0);
String gender= sp.getString("gender", "");

gender1.setText("Gender: " + gender);
age1.setText("Age: " + age);
height1.setText("Height(cm): " + height);
weight1.setText("Weight(kg): " + weight);
  • 启动检查逻辑修改:
if (sp.getInt("height", 0) > 0) {
    // 跳转MainMenu的逻辑
}

修改后的完整MainActivity.java

public class MainActivity extends AppCompatActivity {
EditText enterHeight, enterWeight, enterAge;

private double height;
private double weight;
private double age;
String selectedRadiobut;
Button button;
RadioButton radioMale, radioFemale;
RadioGroup radioGroup;
SharedPreferences sp;

private boolean heightIsValid() {
    if (enterHeight.getText().toString().length() == 0) {
        enterHeight.setError("Cant be empty");
        return false;
    }

    double height = Double.valueOf(enterHeight.getText().toString());
    if (height <= 0) {
        enterHeight.setError("Cant be zero");
        return false;
    }
    if (height <= 40 || height > 250) {
        enterHeight.setError("Cant be less than 40 cm or more than 250 cm");
        return false;
    }
    return true;
}

private boolean weightIsValid() {
    if (enterWeight.getText().toString().length() == 0) {
        enterWeight.setError("Cant be empty");
        return false;
    }

    double weight = Double.valueOf(enterWeight.getText().toString());
    if (weight <= 0) {
        enterWeight.setError("Cant be zero");
        return false;
    }
    if (weight > 600) {
        enterWeight.setError("Cant be more than 600 kg");
        return false;
    }
    return true;
}

private boolean ageIsValid() {
    if (enterAge.getText().toString().length() == 0) {
        enterAge.setError("Cant be empty");
        return false;
    }

    double age = Double.valueOf(enterAge.getText().toString());
    if (age <= 0) {
        enterAge.setError("Cant be zero");
        return false;
    }
    if (age > 116) {
        enterAge.setError("Cant be older than 116 years");
        return false;
    }
    return true;
}

private boolean genderIsSelected() {
    if (radioGroup.getCheckedRadioButtonId() == -1) {
        Toast toast = Toast.makeText(this, "Please select gender", Toast.LENGTH_SHORT);
        toast.show();
        return false;
    }
    if (radioMale.isChecked()) {
        selectedRadiobut = radioMale.getText().toString();
    } else if (radioFemale.isChecked()) {
        selectedRadiobut = radioFemale.getText().toString();
    }
    return true;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getSupportActionBar().hide();
    setContentView(R.layout.activity_main);
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

    sp = getSharedPreferences("MyUserPrefs", Context.MODE_PRIVATE);
    // 检查已保存数据,存在则直接跳转MainMenu
    if (sp.getInt("height", 0) > 0) {
        Intent intent = new Intent(MainActivity.this, MainMenu.class);
        startActivity(intent);
        finish();
        return;
    }

    // 初始化控件
    radioMale = findViewById(R.id.radioMale);
    radioFemale = findViewById(R.id.radioFemale);
    button = findViewById(R.id.button);
    enterHeight = findViewById(R.id.enterHeight);
    enterWeight = findViewById(R.id.enterWeight);
    enterAge = findViewById(R.id.enterAge);
    radioGroup = findViewById(R.id.radioSex);

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (heightIsValid() && weightIsValid() && ageIsValid() && genderIsSelected()) {
                height = Double.valueOf(enterHeight.getText().toString());
                weight = Double.valueOf(enterWeight.getText().toString());
                age = Double.valueOf(enterAge.getText().toString());

                SharedPreferences.Editor editor = sp.edit();
                editor.putInt("height", (int) height);
                editor.putInt("weight", (int) weight);
                editor.putInt("age", (int) age);
                editor.putString("gender", selectedRadiobut);
                editor.apply();

                InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
                Intent intent = new Intent(MainActivity.this, MainMenu.class);
                startActivity(intent);
            }
        }
    });
}
}

内容的提问来源于stack exchange,提问作者VGoychev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 05:34:57