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

Android Studio(Java):如何用SharedPreferences保存ProgressBar进度

问题:App销毁后ProgressBar进度无法保存,TextView正常

已尝试数小时,希望实现关闭或销毁App后仍能保存ProgressBar的进度。该方法在TextView上可正常运行,但在ProgressBar上失效,想排查问题所在,以下是我的代码:

public class MainActivity extends AppCompatActivity {

    public static final String PROGRESS = "progress";
    private int CurrentProgress;
    private ProgressBar progressBar;
    private Button addProgress;
    
    public static final String SHARED_PREFS="sharedPrefs";
    private int getCurrentProgress;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        progressBar = findViewById(R.id.progressBar);
        addProgress = findViewById(R.id.addProgress);

        progressBar.setMax(1000);


        addProgress.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                    CurrentProgress = CurrentProgress + 100;
                     progressBar.setProgress(CurrentProgress);

                     saveData();
                 }
                });
                loadData();
                updateData();
    }

    public void saveData(){

        SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();

        editor.putInt(PROGRESS, CurrentProgress);

        editor.apply();
    }
    public void loadData() {
        SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);

        getCurrentProgress = sharedPreferences.getInt(PROGRESS, CurrentProgress);
    }

    public void updateData() {

        progressBar.setProgress(CurrentProgress);


    }
}

问题排查与修复方案

核心问题

代码存在变量赋值不匹配的错误:

  • 在loadData()方法中,从SharedPreferences读取的进度值被赋值给了getCurrentProgress变量,但后续更新ProgressBar的updateData()方法使用的是CurrentProgress,导致保存的进度根本没有被加载到ProgressBar上。
  • loadData()中默认值使用CurrentProgress(初始为0)虽然逻辑上可行,但显式指定0更清晰。

修复代码

修改loadData()方法即可解决问题:

public void loadData() {
    SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
    // 将读取的进度值赋值给CurrentProgress,而非getCurrentProgress
    CurrentProgress = sharedPreferences.getInt(PROGRESS, 0);
}

public void updateData() {
    progressBar.setProgress(CurrentProgress);
}

说明

  • 修正赋值对象后,App重启时会正确读取保存的进度值并赋值给CurrentProgress,再通过updateData()设置到ProgressBar上。
  • 显式指定默认值0,避免依赖成员变量的默认初始值,代码可读性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:09:24