Android数据存储之SharePreferences简记

前言

之前在项目中有个资料编辑功能,寻找了好久,最终决定使用SharePreferences,可惜当初学的太差,现在只好重新补救,将相关内容整理于此。

资料编辑功能的实现思路:在用户登录时将相关资料从服务器传到客户端保存一份,通过保存的Uid等实现相应的信息发布及资料编辑等该用户的相关操作。

简述

  1. SharedPreferences是一种轻型的数据存储方式。
  2. 它的本质是基于XML文件存储key-value键值对数据。
  3. 通常用来存储一些简单的配置信息。
  4. 其存储位置在/data/data/<包名>/shared_prefs目录下。SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。
  5. 实现SharedPreferences存储的步骤如下:

  一、根据Context获取SharedPreferences对象

  二、利用edit()方法获取Editor对象。

  三、通过Editor对象存储key-value键值对数据。

  四、通过commit()方法提交数据。

具体实现代码

publicclass MainActivity extends Activity {
    @Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
       setContentView(R.layout.main);

//获取SharedPreferences对象
       Context ctx = MainActivity.this;
       SharedPreferences sp = ctx.getSharedPreferences("SP", MODE_PRIVATE);
//存入数据
       Editor editor = sp.edit();
       editor.putString("STRING_KEY", "string");
       editor.putInt("INT_KEY", 0);
       editor.putBoolean("BOOLEAN_KEY", true);
       editor.commit();

//返回STRING_KEY的值
       Log.d("SP", sp.getString("STRING_KEY", "none"));
//如果NOT_EXIST不存在,则返回值为"none"
       Log.d("SP", sp.getString("NOT_EXIST", "none"));
    }
}

代码简析

存入数据

字符(串)类型用putString("KEY","Value")形式。整数类型用putInt("KEY",Value)形式.

代码执行过后,即在/data/data/com.test/shared_prefs目录下生成了一个SP.xml文件,一个应用可以创建多个这样的xml文件。如图所示:

取出数据

使用 sp.getXXX().

sp.getString("KEY"," "),若存在该值,返回前者,反之返回后者,同时后者属于非必须填写项(当然在你认为一定能取到值的情况下,否则未出现什么不可知异常也说不准),即可写成 sp.getString("KEY")。

如上面代码中因为并无值为"NOT_EXIST"的Key,所以Log打印出的是其默认值:“none”。在访问一个不存在key值这个过程中,并无任何异常抛出。

查询结果不存在时提示“none”

SharedPreferences数据的四种操作模式

 SharedPreferences sp = ctx.getSharedPreferences("SP", MODE_PRIVATE);

该代码中,“SP”为所要操作的xml文件名,MODE_PRIVATE为操作模式。

SharedPreferences数据的四种操作模式

  1. Context.MODE_PRIVATE
  2. Context.MODE_APPEND
  3. Context.MODE_WORLD_READABLE
  4. Context.MODE_WORLD_WRITEABLE

Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容

Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件.

Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件.

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

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

SP.xml中的文件

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="STRING_KEY">string</string>
<int name="INT_KEY" value="0"/>
<boolean name="BOOLEAN_KEY" value="true"/>
</map>

项目代码实例片段

登陆Activity中的代码片段

 //获取SharedPreferences对象

    Context ctx = LoginActivity.this;

    SharedPreferences sp = ctx.getSharedPreferences("SP", MODE_PRIVATE);

    //存入数据  

    Editor ed = sp.edit();

    ed.putString("Uname", user.getUname());

    ed.putInt("Uid",user.getUid());

    ed.putString("Upassword", psd);

    ed.putString("Ucolloge",user.getUcolloge());

    ed.putInt("Ugrade",user.getUgrade());

    ed.putString("Uphone",user.getUphone());

    System.err.println("UerUid:"+user.getUid());

    ed.putString("Uemail",user.getUemail());

    ed.putString("Usex",user.getUsex());

    ed.commit();

资料编辑Activity中的代码片段

//获取SharedPreferences对象
   SharedPreferences sharedPreferences= getSharedPreferences("SP", MODE_PRIVATE);
//获取资料
    //Android界面
   PEusername = (EditText) findViewById(R.id.PEusername);
   PEcolloge = (EditText) findViewById(R.id.PEcollege);
   PEgrade = (EditText) findViewById(R.id.PEgrade);
   PEnumber = (EditText) findViewById(R.id.PEnumber);
   PEphone = (EditText) findViewById(R.id.PEphone);
   PEemail = (EditText) findViewById(R.id.PEemail);
   PEsex = (EditText) findViewById(R.id.PEsex);

     //通过getXXX()从xml中取值传入相应的TextView中

   PEusername.setText(sharedPreferences.getString("Uname", ""));

   PEcolloge.setText(sharedPreferences.getString("Ucolloge", ""));

   PEgrade.setText(sharedPreferences.getInt("Ugrade",-1)+"");

   PEphone.setText(sharedPreferences.getString("Uphone", ""));

   PEemail.setText(sharedPreferences.getString("Uemail", ""));

   PEsex.setText(sharedPreferences.getString("Usex", ""));

效果截图

参考资料

Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (三) —— SharePreferences

Android应用开发SharedPreferences存储数据的使用方法

SharedPreferences-百度百科

 求解:Activity.MODE_PRIVATE 和Activity.MODE_APPEND的区别

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏潇涧技术专栏

Android Dependency Injection Libraries

本文总结并对比了三种Android依赖注入库:Butter Knife、RoboGuice、Android Annotations的使用

911
来自专栏向治洪

android多线程下载3

今天跟大家一起分享下android开发中比较难的一个环节,可能很多人看到这个标题就会感觉头很大,的确如果没有良好的编码能力和逻辑思维,这块是很难搞明白的,前面2...

1975
来自专栏Android干货

APP级别处理未捕获异常

3436
来自专栏jianhuicode

如何使用MVP+Dagger2+RxJava+Retrofit开发(1)

概述 在2016年5,6月份开始在知乎上看到开发方法,那时候记得是看mvc,mvp,mvvm这三种开发模式区别,后面进一步了解到google在github上开源...

5158
来自专栏KK的小酒馆

APP启动引导页的制作,用ViewPager实现翻页动画

这次制作App的引导页,主要用到2个知识“SharedPreferences 和 ViewPager”

4651
来自专栏Android开发与分享

【Android】数据存储(一) SharedPreferences详解

3917
来自专栏潇涧技术专栏

Android Training Summary (1) Getting Started

Android Training 中Getting Started部分的阅读笔记

660
来自专栏Android常用基础

Dagger2-从入门到精通(下)

继上篇文章,这篇我们来学习Dagger2的高级用法。如果没看上篇文章的话最好先看下上篇文章再来学习本章,因为本章是接续上篇文章来写的,直接来看的话可能效果不是很...

7062
来自专栏Android干货

安卓开发_数据存储技术_SharedPreferences类

3078
来自专栏Android学习之路

Dagger2使用攻略-基础部分

在这篇文章中,我会介绍 什么是依赖注入,Dagger2是什么,解决什么问题以及基础注解的使用

2404

扫码关注云+社区

领取腾讯云代金券