SharedPreferences的使用

SharedPreferences的使用

使用场景:如果你有一些键对值需要保存到手机内存里面那么符合这个的就是SharedPreferences 它是使用xml来记录你的键对值,存放在你的应用文件夹下,别的应用一般是访问不了这个文件的。
具体的存放位置是data/data/你的应用/share_prefs/ 下面。

保存数据之前你需要建立一个SharedPreferences 对象getSharedPreferences(String, int)
例如
SharedPreferences sp = getSharedPreferences(“test”, MODE_PRIVATE);

第一个参数是你创建文件的名字,第二个是SharedPreferences 的模式有三种模式
SharePreferences 提供了 getSharedPreferences 接口来访问和修改数据
Mode的模式有三种
MODE_PRIVATE
只能由创建它的应用可以看到(或者其他应用使用的同一个应用进程)
MODE_WORLD_READABLE
非常危险 不推荐使用 允许所有的应用对创建的文件拥有查看的权限
MODE_WORLD_WRITEABLE
非常危险 不推荐使用 允许所有的应用对创建的文件拥有修改,增加的权限

这是迈向保存数据的第一步
第二步创建一个修改器
SharedPreferences.Editor 因为修改,增加数据都全靠它的
获取方法如下 不能直接new因为其实接口类,SharedPreferences 已经提供一个实例了,直接调用就可以。
SharedPreferences.Editor editor = sp.edit();
第二步完成
之后开始存储你自己数据了 存储的数据类型有
Boolean,Float,Int,Long,String, Set

例子
// 存储字符串
editor.putString(“string”, “一套带你走”);
// 布尔值
editor.putBoolean(“boolean”, true);
// 浮点值
editor.putFloat(“float”, 3.1415926f);
// 整型
editor.putInt(“int”, 520);
// 长整型
editor.putLong(“long”,5200l);
// set集合 只能存储关于字符串的set
Set set = new HashSet<>();
set.add(“123”);
set.add(“456”);
set.add(“789”);
editor.putStringSet(“set”,set);

最后一步就是提交你存储的数据 记得提交喔 不然没有存储在手机里面的
Boolean flag = editor.commit();
写下这句 查看一下返回值 看是否成功
之后可以在手机里面查看刚保存的xml文件
SharedPreferences的使用_第1张图片

既然可以存储那么就可以取出来
通过getxxx(“键的名字”,”默认值”)

//        通过getxxx方法进行获取
    String astring = sp.getString("string", "卧槽带不走");
    Boolean aBoolean = sp.getBoolean("boolean", false);
    float afloat = sp.getFloat("float", 123f);
    int aint = sp.getInt("int", 123);
    Long along = sp.getLong("long", 123l);
    int[] rt = new int[]{1,2};
    String[] rey = new String[]{"123","2341"};
    Set bset = new HashSet<>();
    bset.add("没有");
    Set aset = sp.getStringSet("set", bset);

// 检查是否含有某个键
Boolean flag = sp.contains(“string”);

以下的是源码

public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView tv = (TextView) findViewById(R.id.showtext);
// SharePreferences 提供了 getSharedPreferences 接口来访问和修改数据
// Mode的模式有三种
// MODE_PRIVATE 只能由创建它的应用可以看到(或者其他应用使用的同一个应用进程)
// MODE_WORLD_READABLE 非常危险 不推荐使用 允许所有的应用对创建的文件拥有查看的权限
// MODE_WORLD_WRITEABLE 非常危险 不推荐使用 允许所有的应用对创建的文件拥有修改,增加的权限

    SharedPreferences sp = getSharedPreferences("test", MODE_PRIVATE);

// 修改必须通过SharedPreferences.Editor 才能进行修改 sp.edit返回一个Editor实例允许你修改信息
SharedPreferences.Editor editor = sp.edit();
// 存储字符串
editor.putString(“string”, “一套带你走”);
// 布尔值
editor.putBoolean(“boolean”, true);
// 浮点值
editor.putFloat(“float”, 3.1415926f);
// 整型
editor.putInt(“int”, 520);
// 长整型
editor.putLong(“long”,5200l);
// set集合 只能存储关于字符串的set
Set set = new HashSet<>();
set.add(“123”);
set.add(“456”);
set.add(“789”);
editor.putStringSet(“set”,set);
//

If you don’t care about the return value and you’re
// * using this from your application’s main thread, consider
// * using {@link #apply} instead.
// 需要进行提交 否则不能存储在xml里面
// 如果同一个关键字有两处或以上修改 存储的时最后一次
// 提交完之后又返回值 根据api 当你在主线程用这个时 用 editor.apply();代替
// Boolean flag = editor.commit();

//// *

Unlike {@link #commit}, which writes its preferences out
// * to persistent storage synchronously, {@link #apply}
// * commits its changes to the in-memory
// * {@link SharedPreferences} immediately but starts an
// * asynchronous commit to disk and you won’t be notified of
// * any failures. If another editor on this
// * {@link SharedPreferences} does a regular {@link #commit}
// * while a {@link #apply} is still outstanding, the
// * {@link #commit} will block until all async commits are
// * completed as well as the commit itself.
// 不像commit那样提交内存修改时把那些数据同步地进行持续化存储
// 它是迅速的但是是异步地提交到磁盘里面 你将会注意不到任何错误
// 如果如果apply还没有解决完 另外的修改器正在做正常的提交 那么提交会阻塞
// 直到其他所有异步提交完成之后 这个提交才会提交
// *

As {@link SharedPreferences} instances are singletons within
// * a process, it’s safe to replace any instance of {@link #commit} with
// * {@link #apply} if you were already ignoring the return value.
// *
// 在程序里如果是单独的实例 如果你忽略返回值 可以安全的吧commit实例用apply取代

// 没有返回值
editor.apply();
// 通过getxxx方法进行获取
String astring = sp.getString(“string”, “卧槽带不走”);
Boolean aBoolean = sp.getBoolean(“boolean”, false);
float afloat = sp.getFloat(“float”, 123f);
int aint = sp.getInt(“int”, 123);
Long along = sp.getLong(“long”, 123l);
int[] rt = new int[]{1,2};
String[] rey = new String[]{“123”,”2341”};
Set bset = new HashSet<>();
bset.add(“没有”);
Set aset = sp.getStringSet(“set”, bset);
// 检查是否含有某个键
Boolean flag = sp.contains(“string”);
String setmess=”233”;
for(Iterator iter = aset.iterator();iter.hasNext();){
setmess+=(String)iter.next();
}
String allmess = astring+”++”+aBoolean+”–”+afloat+”**”+aint+”//”+along+”==”+setmess+”!!”+flag;
tv.setText(allmess);
}
}

你可能感兴趣的:(安卓基础)