zoukankan      html  css  js  c++  java
  • 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。

       

      本文链接:http://www.cnblogs.com/codingblock/p/4887436.html

      声明:本文欢迎任何形式的转载,但请务必保留本文链接,谢谢!

  • 相关阅读:
    使用sourcetree 出现 For user git on host github.com 解决方案
    iOS App Store下载的付费软件 重新签名后 安装到未越狱的手机上
    Swift 入门之简单语法(一)
    [转]C语言指针 之 结构体指针
    Xcode 菜单详解 [转载自用]
    C语言笔记-字符串+转义符(写起来想砸键盘)
    C语言笔记-getchar等蛋疼设定 [可能已解决]
    C语言笔记-枚举类型
    C语言笔记-数据类型长度
    C语言笔记-函数-存储期和作用域
  • 原文地址:https://www.cnblogs.com/codingblock/p/4887436.html
Copyright © 2011-2022 走看看