Android 的 SharePreference 存储方式

一_ 概述

app在开发的时候经常会遇到要存储一些文本,图片,或者是网络获取回来的更新包。这个时候就需要开辟它的存储区域


_ 存储介绍

Android 的5中存储方式:

Internal Storage  (内部存储)

External Storage  (外部存储  如sd 卡)

权限:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

SQLite Databases (数据库)

Network Connection (网络)

Shared Preferences   (键值对,轻量级文件存储)


SharePreference 是一个轻量级的存储机制,它提供一些基础类型的信息存储功能,如 boolean, Int, float, Long, String 等类型,

存储时候的类似HashMap,都是按照 “key = value” 的形式进行保存的,SharePreference 是以 xml 文件为载体,路径是 data/data/包名/share_prefs/文件名.xml。

android.content.Sharepreference借口所保存的信息只能是一些基本数据类型。

存放数据的时候需要调用到SharePreference接口的一个editor属性。

通过editor进行数据添加,移除等操作,记得要调用editor的commit方法提交。

SharePreference 保存用户登录后的 user_id, user_mobile, 这样就可以做自动登录了,每次判断SharePreference中有没有数据,有的话就自动登录。

Java代码

SharedPreferences mSharedPreferences = getSharedPreferences("loginUser", Context.MODE_PRIVATE);  
Editor editor = mSharedPreferences.edit();  
editor.putInt("user_id", 1);  
editor.putString("user_mobile","13811111111");  
editor.commit(); 

其中Context.MODE_PRIVATE是我们最常用的,只允许自己的程序访问下面的写法,是怎么从sharepreference中取出刚存进去的值:private SharedPreferences sp;

Java代码

    private int id;  
    private String numbers;  
    SharedPreferences  sp = context.getSharedPreferences("loginUser", Context.MODE_PRIVATE);  
    //取得user_id和手机号  
    numbers = sp.getString("user_mobile", "");//如果取不到值就取后面的""  
    id = sp.getInt("user_id", "");  

下面的写法,是清除sharepreference中的值:

    SharedPreferences sp = context.getSharedPreferences("loginUser", Context.MODE_PRIVATE);  
      
    Editor editor = sp.edit();  
    editor.clear();  
    editor.commit();   

四种模式

1)MODE_APPEND:追加方式存储

2)MODE_PRIVATE:私有方式存储,其他应用无法访问

3)MODE_WORLD_READABLE:表示当前文件可被其他应用读取

4)MODE_WORLD_WRITEABLE:表示当前文件可被其他应用写入


_ 存储位置

1. 存储在app的私有目录下,及在/data/data/包名下  (要root了才能看到)

dir = mContext.getDir("dir_name", Context.MODE_PRIVATE);


2. 存储在sd卡公用目录 (如果卸载该app 无法卸载该文件夹)

普通的外部存储器(应该先判断是否拥有外部存储器 External storage)

String pathString = Environment.getExternalStorageDirectory() + "/" +filename;

公有目录:

使用app 在sd卡上的私有目录 (应该先判断是否拥有外部存储器 External storage)

Environment.getExternalStoragePublicDirectory


3. 存储在sd卡的私有目录,及在sdk卡开辟一个/Android/data/包名 (如果卸载该app 自动卸载该文件夹)

//使用app 在sd卡上的私有目录 (应该先判断是否拥有外部存储器 External storage)

String pathString = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS) + "/" +filename;
  

4. 判断是否存在外部  External storage ( 摘自官网 )

/* Checks if external storage is available for read and write */
public boolean isExternalStorageWritable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        return true;
    }
    return false;
}

/* Checks if external storage is available to at least read */
public boolean isExternalStorageReadable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state) ||
        Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
        return true;
    }
    return false;
}






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值