数据存储的方式,有比直接文件读写更加简便的方式,那就是操作SharedPreferences。

SharedPreferences一般用于存储用户的偏好设定,暂时不支持多进程操作。

SharedPreferences是一个接口,可以通过Context和Activity中提供的方法获得SharedPreferences的实例。SharedPreferences的数据存放在/data/data/应用包名/shared_pref/目录下。

获取方法:

1.Context.getSharedPreferences(String name, int mode);name用于指定数据存储的文件名,mode同文件读写中的模式。

2.Activity.getPreferences(int mode):返回一个私有的仅能被当前Activity访问的SharedPreferences实例,自动将类名作为文件名。

3.PreferenceManager. getDefaultSharedPreferences(Context context):传入context参数,返回该context上下文所对应的包名作为前缀来命名的文件。

SharedPreferences的使用:

写数据:

通过SharedPreferences.Editor这个内部类的对象来向SharedPreferences对象添加或修改数据。SharedPreferences的edit()方法可以获取这个Editor对象。Editor的putXXX()方法可以添加或修改数据。

添加或修改的数据,还需要通过Editor的commit()方法提交之后才会真正保存到文件中。

读数据:

要读取SharedPreferences中的数据,直接调用它的getXXX()方法即可。

例如,修改上一个示例中的FileUtils,添加writeSp()和readSp()方法:

     public static boolean writeSp(Context context, String data){

            try {

                  SharedPreferences preferences = context.getSharedPreferences("userInfo", Context.MODE_PRIVATE);

                  Editor editor = preferences.edit();

                  if(!data.contains("#")){

                       return false;

                  }

                  String[] strings = data.split("#");

                  editor.putString("username", strings[0]);

                  editor.putString("password", strings[1]);

                  editor.commit();

                  return true;

            } catch (Exception e) {

                  // TODO Auto-generated catch block

                  e.printStackTrace();

                  return false;

            }

       }

       public static String readSp(Context context){

            try {

                  SharedPreferences preferences = context.getSharedPreferences("userInfo", Context.MODE_PRIVATE);

                  String username = preferences.getString("username", "");

                  String password = preferences.getString("password", "");

                  return username+"#"+password;

            } catch (Exception e) {

                  // TODO Auto-generated catch block

                  e.printStackTrace();

            }

            return null;

       }

修改MainActivity的onCreate(),对应读写文件改成调用读写SharedPreferences方法即可。

运行结果:

导出这个xml文件:

 <?xml version='1.0' encoding='utf-8' standalone='yes' ?>

 <map>

 <string name="password">abcdef</string>

 <string name="username">dqrcsc</string>

 </map>

修改writeSp()和readSp()方法,改为通过Activity的getPreferences()获取SharedPreferences对象:

 SharedPreferences preferences = ((Activity)context).getPreferences(Context.MODE_PRIVATE);

运行结果:

可知,通过Activity获取SharedPreferences对象,默认以当前Activity的全限定名作为文件名。

修改writeSp()和readSp()方法,改为通过PreferenceManager的getDefaultSharedPreferences(Context context)获取SharedPreferences对象:

 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);

运行结果:

可知,这种方式下数据的存放文件以传入的Context对应的包名作为前缀,然后连上_preferences.xml作为文件名。

最新文章

  1. Android 通过httppost上传文本文件到服务器。
  2. Copy-On-Write容器
  3. 【Linux】Linux统计文件夹、文件数量的命令
  4. Linux mips64r2 PCI中断路由机制分析
  5. Word基础
  6. Graded Browser Support
  7. Log4j 与 Logback的ConversionPattern对比
  8. java编译错误 程序包javax.servlet不存在javax.servlet.*
  9. UVa 11019 (AC自动机 二维模式串匹配) Matrix Matcher
  10. 关于JavaScript对象的键和值
  11. VS2010 rdlc 被除数为0 显示错误号
  12. 基础:获得servletAPI
  13. LeetCode算法题-Longest Uncommon Subsequence I(Java实现)
  14. NEO智能合约开发(一)不可能完成的任务
  15. Ubuntu18.04搜狗输入法最新版本2.2.0.0108经常乱码的解决方案
  16. Ajax的请求规范(二)
  17. linux的基本操作(RPM包或者安装源码包)
  18. mysql与mysqli的区别
  19. BZOJ 400题纪念
  20. Servlet3.0的注解自定义原生Servlet实战

热门文章

  1. Shell--变量内容的删除、替代与替换
  2. 摄像头bug查找工作总结
  3. 计算GPS两点间的距离[单位为:米]
  4. MySql中文乱码问题(3)
  5. 解决ListView在界面只显示一个item
  6. 关于 Nginx 并发连接数
  7. 微信小程序登录JAVA后台
  8. Redis与Reactor模式
  9. Burp Suite基本用法
  10. 会话管理之Cookie技术