SharePreferences

SharePreferences基础:

  • 一个轻量级的存储类,特别适合用于保存软件配置参数。returned by getSharedPreferences (String name,int mode) , go through an SharedPreferences.Editor object , 实现类为SharedPreferencesImpl,只获取数据而不存储和修改,存储修改是实现类EditorImpl

  • 用SharedPreferences保存数据,其实是用xml文件存放数据,存放在/data/data//shared_prefs目录下

实现类.png
SharePreferences_第1张图片
文件夹地址.png
    存储数据:
    SharedPreferences sharedPreferences = getSharedPreferences("fileName, Context.MODE_PRIVATE);  //私有数据
    Editor editor = sharedPreferences.edit();  //获取存储器
    editor.putString("key", "key");  //采用key-value键值对存放
    editor.putInt("age", 4);
    editor.commit();  //提交

    获取数据:
    SharedPreferences sPres=getSharedPreferences("fileName",Context.MODE_PRIVATE);
    int age=sPres.getInt("age",0);
    String str=sPres.getString("key","");  //第二个参数为默认值,如果preference中不存在该key,将返回默认值

    生成fileName.xml文件内容如下:
    
    
    key
    
    
  • getSharedPreferences (String name,int mode)
    name为文件的名称,名称不用带后缀,后缀会由Android自动加上;
    mode为指定文件的操作模式,有以下四种。
  1. MODE_APPEND: 追加方式存储
  2. MODE_PRIVATE: 私有方式存储,其他应用无法访问
  3. MODE_WORLD_READABLE: 表示当前文件可以被其他应用读取
  4. MODE_WORLD_WRITEABLE: 表示当前文件可以被其他应用写入
SharePreferences保存对象/文件
  • 保存/读取图片
    **保存图片**
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

    //使用BitmapFactory拿到压缩文件,compress方法压缩并保存到byteArrayOutputStream
    BitmapFactory.decodeResource(getResources(), R.drawable.image).compress(Bitmap.CompressFormat.JPEG, 60, byteArrayOutputStream);

    //通过Base64.encode将字节文件转换成Base64编码保存在String中。
    String imageStr = new String(Base64.encode(byteArrayOutputStream.toByteArray(), Base64.DEFAULT));

    byteArrayOutputStream.close();


    **读取图片**
    //对Base64格式的字符串解码,还原成字节数组。
    byte[] imageBytes = Base64.decode(imageStr.getBytes(), Base64.DEFAULT);

    //字节数组装载到ByteArrayInputStream。
    ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(imageBytes);

    //Drawable.createFromSteam方法将byteArrayInputStream编译成图片文件。 
    ImageView imageView = (ImageView) findViewById(R.id.imageView);
    imageView.setImageDrawable(Drawable.createFromStream(byteArrayInputStream, "image"));

    byteArrayInputStream.close();

  • 保存/读取对象
    **保存对象**
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

    //然后将得到的字符数据装载到ObjectOutputStream。
    ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);

    //writeObject 写入对象 / 读取的时候 readObject 还原对象。
    objectOutputStream.writeObject(mobile);
    
    //最后,用Base64.encode将字节文件转换成Base64编码保存在String中
    String mobilesString = new String(Base64.encode(byteArrayOutputStream.toByteArray(), Base64.DEFAULT));
    
    //关闭objectOutputStream
    objectOutputStream.close();


    **读取对象**
    byte[] userBytes = Base64.decode(mobilesString.getBytes(), Base64.DEFAULT);

    ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(userBytes);

    ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);

    User user = (User) objectInputStream.readObject();
    
    objectInputStream.close();

相关扩展

  • 如果要删除通过SharedPreferences产生的文件,方法:
    File file= new File("/data/data/"+getPackageName().toString()+"/shared_prefs","fileName.xml");
    if(file.exists()){
       file.delete(); 
       Toast.makeText(MainActivity.this, "删除成功",Toast.LENGTH_LONG).show(); 
     }
  • 访问其他应用的SharedPreferences
    首先满足条件,被访问的应用的Preferences创建时指定Context.MODE_WORLD_READABLE或Context.MODE_WORLD_WRITEABLE模式。假设包名为com.ai.demo的应用创建了Preferences

1.第一种获得应用Context,通过Context访问Preferences,访问preferences时会在应用所在包下的shared_prefs目录找到preferences:

    Context appsContext = createPackageContext("com.ai.demo", Context.CONTEXT_IGNORE_SECURITY);
    SharedPreferences sPrefs = appsContext.getSharedPreferences("fileName", Context.MODE_WORLD_READABLE);
    int age = sPrefs.getInt("age", 0);
    String name = sPrefs.getString("name", "");

2.第二种读取xml文件方式直接访问其他应用preference对应的xml文件

    File xmlFile = new File("/data/data/"+com.ai.demo+"/shared_prefs/fileName.xml");

你可能感兴趣的:(SharePreferences)