Android SharedPreferences app内部存储方式

   小白的学习记录,很多用词可能不太专业,见谅!

 

 

    安卓开发的时候可以用文件存储的形式,将app的数据保存在app所在的目录下,也就是内部存储,数据只能被app访问,外部没有权限读取这些数据,今天要介绍的SharedPreferences 文件存储方式就是一种

app内部存储。

    文件存储的操作无非就是两类文件读取和文件写入,当我们在Activity里面进行存取的操作时,只需要建立SharedPreferences对象,进行相应的操作即可:

     如:

SharedPreferences shp=getPreferences(Context.MODE_PRIVATE);//现在基本上都只用private,因为现在只允许app内部访问这个数据文
SharedPreferences.Editor editor=shp.edit();//生成edit对象
editor.putInt("NUMBER",1);//参数1是id,参数2是数值
editor.apply();//这个apply是非同步的可以避免多个线程同时修改一个键值导致冲突
//editor.commit();这个也是提交


需要注意的是,这里面获取shp对象使用的是getPreferences()方法,该方法不用传入文件名,调用这个方法会自动生成一个和activity名相同的文件

当然我们也可以将对数据的操作封装到一个专门操作数据的类,但是在其他类里要想访问activity的全局文件,需要将activity的Context传给这个操作数据的类

如,在类Acitivity里面:

          MyData data =new MyData(context:this); 
          这个this的意思是把整个activity传递到MyData类里面
          但是MainActivity会随着程序的运行不断摧毁和重建,会产生多个context,这会导致一个内存的泄露 
          所以建议使用另一个: 
         MyData data =new MyData(getApplicationContext());这个applicationContext()指向的是整个app,只会存在一个实例,不会 有内存泄露的问题、

   而在对应的MyData类里:

private Context context;    //定义一个Context
public MyData(Context context){ //构造函数里作为一个参数传入
this.context=context;
}
public void save(){
//这里为了规范,文件名也需要保存在资源文件里
//需要注意的是,在activity意外的类里面需要用函数先获取activity再获取它的资源,如下
String id=context.getResources().getString(R.string.data_id);
String num_id=context.getResources().getString(R.string.num);
SharedPreferences shp=context.getSharedPreferences(id,Context.MODE_PRIVATE);
SharedPreferences.Editor editor=shp.edit();
editor.putInt(num_id,number);

}


这里需要注意的是,文件名和键的名称也需要规范化,加入到资源文件去,在调用时这样写:
String name=context.getResources().getString(R.string.id);

   

 

 

 

总结:对数据操作进行封装时,需要在Activity类里面将context作为参数传入到特定的类,给予该类访问app全局文件的权力,

该类中也需要写好对应的构造函数,进行对应的文件操作。

 

posted @ 2020-05-10 00:31  嘿三声  阅读(306)  评论(0)    收藏  举报