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

Android中Activity间传递数据的永久存储实现方案咨询

Android中Activity间传递数据的永久存储实现方案咨询

嗨,我来帮你搞定这个问题!你现在碰到的情况太常见了——Intent的extras只是临时存数据,就像你临时把东西放口袋里,app一关闭就会被系统清理掉,所以确实得用SharedPreferences来做持久化存储,它专门用来存这种轻量的键值对数据,完全适配你的需求。

我给你一步步拆解怎么实现,代码都给你写好,直接抄过去改改就能用:

第一步:在MainActivity中,传递数据的同时存入SharedPreferences

当你准备从MainActivity跳转到SecondActivity时,别只靠Intent传数据,顺便把数据存到SharedPreferences里,这样就算app关了,数据也还在。比如在按钮点击事件里这么写:

// 假设你要传递的是字符串数据,比如从EditText获取的用户输入内容
EditText inputEt = findViewById(R.id.input_et);
String dataToSave = inputEt.getText().toString().trim();

// 初始化SharedPreferences,"MyAppPrefs"是自定义的存储文件名,你可以随便改,只要读写时名称一致就行
SharedPreferences sharedPref = getSharedPreferences("MyAppPrefs", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
// 用一个唯一的key来绑定数据,比如"user_saved_content",后面读取数据也要用这个key
editor.putString("user_saved_content", dataToSave);
editor.apply(); // 异步保存操作,不会阻塞主线程,比commit()更推荐使用

// 正常执行跳转逻辑,顺便通过Intent传数据(保证跳转后能即时显示)
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra("temp_transfer_data", dataToSave);
startActivity(intent);

第二步:在SecondActivity中,优先从SharedPreferences读取数据

当SecondActivity启动时,不管是刚从MainActivity跳转过来,还是重启app后打开,都先去SharedPreferences里找数据,找不到再从Intent里取,这样就保证数据不会丢:

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

    TextView displayTv = findViewById(R.id.display_tv);
    String showData;

    // 先读取SharedPreferences里的持久化数据
    SharedPreferences sharedPref = getSharedPreferences("MyAppPrefs", Context.MODE_PRIVATE);
    // 第二个参数是默认值,如果没读到数据就返回空字符串
    showData = sharedPref.getString("user_saved_content", "");

    // 如果SharedPreferences里没数据(比如第一次打开app,还没从MainActivity传过数据),再从Intent里拿
    if (showData.isEmpty()) {
        Intent intent = getIntent();
        showData = intent.getStringExtra("temp_transfer_data");
        // 防止Intent里也没数据,给个默认提示
        if (showData == null) {
            showData = "暂无保存的数据";
        }
    }

    // 把数据显示到界面上
    displayTv.setText(showData);
}

一些额外的小提示

  • 除了字符串,SharedPreferences还支持存储整数、布尔值、浮点数等类型,对应putInt()、putBoolean()方法,读取时要用对应的getInt()、getBoolean(),记得key要和存储时保持一致
  • MODE_PRIVATE是最常用的模式,意思是只有你的app能访问这个存储文件,避免其他app篡改你的数据
  • 如果之后要修改保存的数据,直接用同一个key调用putXXX()再执行apply()就行;要删除数据的话,用editor.remove("user_saved_content")然后apply()就可以了

这样改完之后,你再关闭app重启,SecondActivity里就能显示之前保存的数据啦!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 13:53:13