Android入门教程 | SharedPreferences 简介
有时候我们想在应用中存储一些数据。比如一些配置信息。 例如存储int,float,boolean,字符串这类的数据。
【Android入门教程 | SharedPreferences 简介】写文件可能会比较繁琐。需要自己实现文件读写操作,定义数据存放结构。 对于这些简单的数据,我们可以用 SharedPreferences (下文或简称sp)来进行存储。
sp 使用的是 key-value 类型的数据结构。之前接触到的 json格式也是 key-value 类型的。
存数据
第一步是获取到一个 SharedPreferences 对象。在Activity中,可以调用getSharedPreferences(String name, int mode)
方法。需要传入这个sp的名字。
private static final String SP_1 = "sp_1";
getSharedPreferences(SP_1, Context.MODE_PRIVATE)
存入各项数据。int有对应的
putInt
方法。同理,boolean、float、long、String、StringSet都有对应的put方法。 也简写为putXxx
方法。private void saveParams() {
Set set = new HashSet<>();
set.add("R");
set.add("u");
set.add("s");
set.add("t");
getSharedPreferences(SP_1, Context.MODE_PRIVATE).edit()
.putInt(K_1, 1000)
.putBoolean(K_2, true)
.putFloat(K_3, 3.14159f)
.putLong(K_4, System.currentTimeMillis())
.putString(K_5, "RustFisher")
.putStringSet(K_6, set)
.apply();
}
最后调用
apply()
方法,把数据写入。 注意apply()
方法,它并不保证立刻把数据写入。它是一个异步的方法。而
commit()
是一个同步方法。它会在当前线程立刻执行。官方推荐使用
apply()
来保存信息。运行到机器上。如果数据保存成功,在as的Device File Explorer面板中,我们可以找到文件
/data/data/com.rustfisher.tutorial2020/shared_prefs/sp_1.xml
。使用sp,会在应用内部的
shared_prefs
目录创建xml文件。运行示例工程,我们可以看到
shared_prefs
目录有别的库创建的sp文件。 例如BuglySdkInfos.xml
或x5_proxy_setting.xml
等等。`
可看出它存储使用的是xml文件,外围标签是
。读数据 存入数据后,我们可以把数据读出来。和
putXxx
方法类似,sp提供了getXxx
方法。例如
int getInt(String key, int defValue);
方法。 后面的defValue是默认值。如果这个key没有对应的int,则返回默认值defValue。- getInt
- getBoolean
- getFloat
- getLong
- getString
- getStringSet
private void readParams() {
SharedPreferences sp = getSharedPreferences(SP_1, Context.MODE_PRIVATE);
StringBuilder sb = new StringBuilder();
sb.append(K_1).append(": ").append(sp.getInt(K_1, -1));
sb.append("\n").append(K_2).append(": ").append(sp.getBoolean(K_2, false));
sb.append("\n").append(K_3).append(": ").append(sp.getFloat(K_3, -1));
sb.append("\n").append(K_4).append(": ").append(sp.getLong(K_4, -1));
sb.append("\n").append(K_5).append(": ").append(sp.getString(K_5, "none"));
sb.append("\n").append(K_6).append(": ").append(sp.getStringSet(K_6, null));
mTv1.setText(sb.toString());
}
Android零基础入门教程视频参考
推荐阅读
- android第三方框架(五)ButterKnife
- Android中的AES加密-下
- 带有Hilt的Android上的依赖注入
- android|android studio中ndk的使用
- Android事件传递源码分析
- RxJava|RxJava 在Android项目中的使用(一)
- Android7.0|Android7.0 第三方应用无法访问私有库
- 深入理解|深入理解 Android 9.0 Crash 机制(二)
- android防止连续点击的简单实现(kotlin)
- Android|Android install 多个设备时指定设备