Android学习笔记(十三)SharedPreference必须掌握的基础

  我们在开发中,应用程序会保存少量数据,例如一些字符串、一些标记或者一些配置文件,这时候如果去使用SQLite保存这些数据的话,难免会显得大材小用,用起来也不方便,对于这种信息,保存在SharedPreferences中在合适不过了。

一、SharedPreferences简介。

  1、SharedPreferences是一种轻型的存储方式,它的原理是基于xml文件存储key-value键值对数据,通常用来存储一些简单的配置信息。存储位置:/data/data/{包名}/shared_prefs目录下。SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。

  2、SharedPreferences对象与SQLite数据库相比,更加的轻量级,不需要创建数据库,创建表,写SQL语句等一系列的操作。美中不足的是SharedPreferences只支持一下几种类型的数据:

  boolean、 int 、float、 long、String

  3、SharedPreferences本身是一个接口,程序无法直接创建它的实例,只能通过Context提供的getSharedPreferences(String name, int mode)来获取它的实例,该方法的第二个参数支持如下几个值:

  · Context.MODE_PRIVATE :只被本地程序读写。

  · Context.MODE_WORLD_READABLE :能被其他程序读。

  · Context.MODE_WORLD_WRITEABLE :能被其他程序读、写。

  4、SharedPreferences的常用方法如下:

  · boolean contans(String key) :判断SharedPreferences中是否包含特定key的数据。

  · abstract Map<String, ?> getAll() :获取全部的key-value键值对。

  · boolean getXxx(String key, xxx default) : 获取指定key对应的值,如果该key不存在,返回default值。

  还有一点就是,它也不支持条件查询等等,所以尽管SharedPreferences操作起来非常方便,但它也只能作为存储方式的一种补充,而无法完全替代SQLite数据库等其他数据存储方式。

二、Editor简介

  SharedPreferences本身没有提供写入数据的方法,而是通过SharedPreferences的对象调用editor()方法获取Editor对象来写入数据。Editor的常用方法如下:

  · clear() :清空SharedPreferences里所有数据。

  · putXxx(String key, xxx value) :向SharedPreferences中写入数据。

  · remove(String key) :删除SharedPreferences中指定key的值。

  · commit() :当Editor编辑完,该方法提交修改。

三、用一个例子来说明SharedPreferences的用法

  下面将以一个简单的例子来说明SharedPreferences是怎么来用的。

  1、首先创建一个布局文件activity_main,同时在布局文件中放置四个空间,分别是:输入框、读取、写入和清除。读取代码如下:

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical"
 6      >
 7 
 8     <EditText
 9         android:id="@+id/et_data"
10         android:layout_width="wrap_content"
11         android:layout_height="wrap_content"
12         android:ems="10" >
13 
14         <requestFocus />
15     </EditText>
16 
17     <Button
18         android:id="@+id/btn_read"
19         android:layout_width="wrap_content"
20         android:layout_height="wrap_content"
21         android:text="读取" />
22     
23     <Button
24         android:id="@+id/btn_write"
25         android:layout_width="wrap_content"
26         android:layout_height="wrap_content"
27         android:text="写入" />
28     
29     <Button
30         android:id="@+id/btn_clear"
31         android:layout_width="wrap_content"
32         android:layout_height="wrap_content"
33         android:text="清除" />
34 
35 </LinearLayout>

   布局文件非常简单,这里就不一一分析了。

  2、然后创建MainActivity,并在MainActivity实现对SharedPreferences的写入、读取、清楚等相关操作,代码如下:

 1 /**
 2  * MainActivity
 3  * 
 4  * @author liuwei
 5  * 
 6  */
 7 public class MainActivity extends Activity {
 8     private SharedPreferences preferences;
 9     private Editor editor;
10     EditText et_data;
11     Button btn_read;
12     Button btn_write;
13     Button btn_clear;
14 
15     @Override
16     protected void onCreate(Bundle savedInstanceState) {
17         super.onCreate(savedInstanceState);
18         setContentView(R.layout.activity_main);
19         et_data = (EditText) findViewById(R.id.et_data);
20         btn_read = (Button) findViewById(R.id.btn_read);
21         btn_write = (Button) findViewById(R.id.btn_write);
22         btn_clear = (Button) findViewById(R.id.btn_clear);
23         preferences = getPreferences(Activity.MODE_PRIVATE);
24         editor = preferences.edit();
25         btn_read.setOnClickListener(new OnClickListener() {
26 
27             @Override
28             public void onClick(View v) {
29                 String str = preferences.getString("key", "没有该数据");
30                 Toast.makeText(getApplicationContext(), str, Toast.LENGTH_SHORT)
31                         .show();
32             }
33         });
34         btn_write.setOnClickListener(new OnClickListener() {
35 
36             @Override
37             public void onClick(View v) {
38                 editor.putString("key", et_data.getText().toString());
39                 if (editor.commit()) {
40                     Toast.makeText(getApplicationContext(), "写入成功",
41                             Toast.LENGTH_SHORT).show();
42                 }
43             }
44         });
45         btn_clear.setOnClickListener(new OnClickListener() {
46 
47             @Override
48             public void onClick(View v) {
49                 editor.clear();
50                 if (editor.commit()) {
51                     Toast.makeText(getApplicationContext(), "清除成功",
52                             Toast.LENGTH_SHORT).show();
53                 }
54 
55             }
56         });
57     }
58 }

  代码分析:

  (1)代码中首先创建了SharedPreferences和Editor的对象,并在onCreate()方法中对它们作了初始化操作。

  (2)通过editor.putString()方法是下了写入数据,数据时以键值对的形式写入的。

  (3)通过SharedPreferences对象的getString(key, default)方法,即可获取对应key的值,这里的第二个参数default为在没有key对应的数据时的默认值,可由我们自行赋值。

  (4)最后可以可通过editor.clear()方法,对SharedPreferences进行清空操作。

  注:对Editor对象的操作,操作完后需要执行commit方法。同时editor.commit()方法会返回一个boolean值,执行成功返回true,执行失败返回false。

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏向治洪

android多线程下载3

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

1865
来自专栏Android机器圈

Android数据绑定技术二,企业级开发

PS:上一篇文章写了Databinding的简单使用,写了一个绑定textview的示例,和绑定的一些用法,估计有的人会说,之前的写的好好的,为什么要数据绑定这...

3539
来自专栏Android Note

Android-实用的MVP

1183
来自专栏Vamei实验室

安卓第八夜 玛丽莲梦露

上一讲说明了数据库中存取数据的方法。这一讲将以条目的视图方式,来以相似的视图方式,显示多个数据对象。这种方式特别适合于显示从数据库中取出的多个结构相似的数据,比...

2019
来自专栏Android干货

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

2878
来自专栏Android开发经验

事件分发主要过程

1212
来自专栏cloudskyme

android开发列表界面

android开发列表界面,上边是一个显示题目,下边显示的是图标,中间显示的是列表。 看一下效果吧 ? 当鼠标点击上之后出现背景图,下面看一下如何做出这样的效果...

3516
来自专栏WindCoder

Android数据存储之SharePreferences简记

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

1141
来自专栏Fish

SharedPreferences存储数据

使用这个可以在不同的Activity中调用并获得里面保存的值。这个貌似是把里面的内容保存在了一个xml文件里。 Android应用开发SharedPrefe...

22110
来自专栏Android开发与分享

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

3757

扫码关注云+社区