1. 前言:

  1. 用途:存储轻量数据

  2. 注意:此方式是内部存储,存在手机内存里,内部存储属于应用本身,若此应用被卸载,则存储的数据都将消失。

2. 使用:

1. 代码案例
//1. 获取SharedPreferences实例SharedPreferences sharedPreferences = getSharedPreferences("user_info", Context.MODE_PRIVATE);//2. 获取操作SharedPreferences实例的编辑器EditorSharedPreferences.Editor editor = sharedPreferences.edit();//3. 添加数据editor.putString("name", "xing");editor.putBoolean("isGirl", false);editor.putInt("age", 18);editor.putLong("id", 2019122616530201234L);editor.putFloat("money", 9999.99f);//4. 提交editor.apply();//or edit.commit();    //获取值     String name = sharedPreferences.getString("name", "no name");
2. 方法解析
getSharedPreferences(String var1, int var2);     var1: 存储的文件名     var2:操作文件的模式    //Context.MODE_PRIVATE:默认私有模式,代表该文件是私有数据,只能被应用本身访问,该模式下,写入内容会覆盖原文件的内容    //Context.MODE_APPEND:附加模式,会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。    //Context.MODE_WORLD_READABLE: 公有权限模式:其他应用是否有权限读该文件, 当前文件可被其他应用读取。    //Context.MODE_WORLD_WRITEABLE:  公有权限模式:其他应用是否有权限写该文件, 当前文件可被其他应用写入。    putXXX(key, value)    //同Map的键值对模式   getString(String var1, String var2)   var1: 存储是的key,   var2:获取到的默认值
3. 其他
  1. 文件存储位置:
    存储里面的/data/data/<应用包名>/shared_prefs

  2. commit() 与 apply()区别?
    API25中,apply方法的注释。大致意思就是apply是一个原子请求(不需要担心多线程同步问题)。
    commit将同步的把数据写入磁盘和内存缓存。
    apply会把数据同步写入内存缓存,然后异步保存到磁盘,可能会执行失败,失败不会收到错误回调。
    如果你忽略了commit的返回值,那么可以使用apply替换任何commit的实例。
    简单说就是除非你需要关心xml是否写入文件成功,否则你应该在所有调用commit的地方改用apply。
    SharedPreferences是个单例,所以任意Context拿到的都是同一个实例。
    SharedPreferences在实例化的时候会把SharedPreferences对应的xml文件内容全部读取到内存。
    对于非多进程兼容的SharedPreferences的读操作是从内存读取的,不涉及IO操作。
    写入的时候由于内存已经保存了完整的xml数据,然后新写入的数据也会同步更新到内存,所以无论是用commit还是apply都不会影响立即读取。

  3. SharedPreferences本身已经做了内存缓存。

4. 封装的工具类
public class SPTools {         public static final String name_file_sp = "name_file_sp";    public static void setString(Context context,String key,String value){             SharedPreferences sp = context.getSharedPreferences(name_file_sp, Context.MODE_PRIVATE);        sp.edit().putString(key, value).apply();    }    public static String getString(Context context,String key,String value){             SharedPreferences sp = context.getSharedPreferences(name_file_sp, Context.MODE_PRIVATE);        return sp.getString(key, value);    }    public static void setBoolean(Context context,String key,boolean value){             SharedPreferences sp = context.getSharedPreferences(name_file_sp,Context.MODE_PRIVATE);        sp.edit().putBoolean(key,value).apply();    }    public static boolean getBoolean(Context context,String key,boolean value){             SharedPreferences sp = context.getSharedPreferences(name_file_sp,Context.MODE_PRIVATE);        return sp.getBoolean(key,value);    }    public static void setInt(Context context,String key,int value){             SharedPreferences sp = context.getSharedPreferences(name_file_sp, Context.MODE_PRIVATE);        sp.edit().putInt(key, value).apply();    }    public static int getInt(Context context, String key, int value){             SharedPreferences sp = context.getSharedPreferences(name_file_sp, Context.MODE_PRIVATE);        return sp.getInt(key, value);    }    public static void setLong(Context context,String key,Long value){             SharedPreferences sp = context.getSharedPreferences(name_file_sp, Context.MODE_PRIVATE);        sp.edit().putLong(key, value).apply();    }    public static Long getLong(Context context,String key,Long value){             SharedPreferences sp = context.getSharedPreferences(name_file_sp, Context.MODE_PRIVATE);        return sp.getLong(key, value);    }    public static String InputToString(Context context,String key){             String result = null;        try {                 InputStream is = context.getAssets().open(key);            ByteArrayOutputStream baos = new ByteArrayOutputStream();            byte[] buffer = new byte[1024];            int len = 0;            while((len = is.read(buffer))!=-1){                     baos.write(buffer, 0, len);            }            is.close();            result = baos.toString();        } catch (IOException e) {                 e.printStackTrace();        }        return result;    }}

更多相关文章

  1. android 抓包实际应用
  2. 【android】为PopupWindow设置动画效果
  3. Android启动找不到activity问题
  4. android几种数据存储方式
  5. Android(安卓)Gradle开发
  6. Android(安卓)---模拟手机发送短信
  7. 多种方式实现Android页面布局的切换
  8. Android内存情况
  9. Android(安卓)WebView文件上传各版本区别

随机推荐

  1. android处理资源文件复制到database区域j
  2. Android Studio Gradle Syn failed 解决
  3. android弹出和关闭软键盘
  4. Android studio3.0 使用Lambda表达式
  5. 在android中,如何用指定的浏览器打开某网
  6. IOS/Android 读取蓝牙设备电量信息
  7. Android Activity或者Fragment 向Adapter
  8. android 经纬度 double类型 转换成 度分
  9. android之短信发不出去,短信空指针,smsMana
  10. Android SmartRefreshLayout的使用