数据存储的方式,有比直接文件读写更加简便的方式,那就是操作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作为文件名。

android菜鸟学习笔记18----Android数据存储(二)SharedPreferences的更多相关文章

  1. springmvc学习笔记(18)-json数据交互

    springmvc学习笔记(18)-json数据交互 标签: springmvc springmvc学习笔记18-json数据交互 springmvc进行json交互 环境准备 加入json转换的依赖 ...

  2. android菜鸟学习笔记17----Android数据存储(一)文件读写

    假如有如下需求,要求能够记录用户输入的用户名和密码,下次登录时,能直接获取之前保存的用户名密码,并在相应的EditText中显示. 要保存用户输入的数据,最先想到的应该就是文件读写了. 通过对andr ...

  3. android菜鸟学习笔记24----与服务器端交互(一)使用HttpURLConnection和HttpClient请求服务端数据

    主要是基于HTTP协议与服务端进行交互. 涉及到的类和接口有:URL.HttpURLConnection.HttpClient等 URL: 使用一个String类型的url构造一个URL对象,如: U ...

  4. android菜鸟学习笔记25----与服务器端交互(二)解析服务端返回的json数据及使用一个开源组件请求服务端数据

    补充:关于PHP服务端可能出现的问题: 如果你刚好也像我一样,用php实现的服务端程序,采用的是apache服务器,那么虚拟主机的配置可能会影响到android应用的调试!! 在android应用中访 ...

  5. android菜鸟学习笔记23----ContentProvider(三)利用内置ContentProvider监听短信及查看联系人

    要使用一个ContentProvider,必须要知道的是它所能匹配的Uri及其数据存储的表的结构. 首先想办法找到访问短信及联系人数据的ContentProvider能接受的Uri: 到github上 ...

  6. android菜鸟学习笔记21----ContentProvider(一)ContentProvider的简单使用

    ContentProvider是Android四大组件之一,它用来封装数据,并通过ContentResolver接口将数据提供给其他应用.只有当需要在多个应用之间共享数据时才会用到ContentPro ...

  7. android菜鸟学习笔记14----Android控件(三) ListView的简单使用

    MVC模式: MVC的基本原理就是通过Controller连接View和Model.当View中所显示的数据发生变化时,会通知Controller,然后由Controller调用Model中的相关方法 ...

  8. android菜鸟学习笔记10----Intent及<intent-filter>

    关于Bundle: 注意到Activity的onCreate()方法的签名是protected void onCreate(Bundle savedInstanceState),其参数是一个Bundl ...

  9. android菜鸟学习笔记31----Android使用百度地图API(二)获取地理位置及地图控制器的简单使用

    1.获取当前地理位置: Android中提供了一个LocationManager的类,用于管理地理位置.不能通过构造函数获取该类的实例,而是通过Context的getSystemService(): ...

随机推荐

  1. Hadoop部署记录

    1.准备Linux环境 1.0先将虚拟机的网络模式选为NAT 1.1修改主机名 vi /etc/sysconfig/network NETWORKING=yes HOSTNAME=node1 ### ...

  2. 基于HDFS的SparkStreaming案例实战和内幕源码解密

    一:Spark集群开发环境准备 启动HDFS,如下图所示: 通过web端查看节点正常启动,如下图所示: 2.启动Spark集群,如下图所示: 通过web端查看集群启动正常,如下图所示: 3.启动sta ...

  3. 转:mybatis3中@SelectProvider的使用技巧

    mybatis3中@SelectProvider的使用技巧 mybatis的原身是ibatis,现在已经脱离了apache基金会,新官网是http://www.mybatis.org/. mybati ...

  4. Windows虚拟内存如何设置

    当我们在运行一些大型的软件,或者是刚刚退出游戏的时候经常会提示"你的虚拟内存过低"的提示,出现这种情况一般是:一:你的物理内存比较小,运行大的软件比较吃力:二:你运行了许多窗口或者 ...

  5. XP中如何配置和共享打印机

    Win XP中如何配置和共享打印机                一.配置  打印机 在"控制面板"打开"打印机和传真",在左边的选项或单击右键选择" ...

  6. TCP应用程序通信协议的处理

    TCP应用程序通信协议的处理 flyfish 2015-6-29 一 流式处理 TCP是一种流协议(stream protocol).TCP数据是以字节流的形式传递给接收者的,没有固有的"报 ...

  7. 文件——文件指针——文件练习(随机产生N个手机号)——自动关文件

    python 2 3file() #python 2读模式 写模式 追加模式 只要沾上了r,文件不存的就会报错读模式 r 读写模式 r+(可以写)1.不能写2.文件不存在报错f=open('123', ...

  8. 了解MVC框架开发

    版权声明:本文为博主原创文章,未经博主允许不得转载. 前言:本篇文章我们浅谈下MVC各个部分,模型(model)-视图(view)-控制器(controller), 以及路由. 对于使用MVC的好处大 ...

  9. jvm性能调优常用命令

    说明和名词解释: ①  只有进行的运行用户才可以调用命令查看相关信息 ②  [pid] 为需要查看的进程的端口号 ③  [file] 为需要导出到的文件的具体地址 ④ [tid] 进程中线程的id 1 ...

  10. linux安全组配置

    万网的是这样子配置的: