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
相关产品推荐
相关产品推荐

