数据存储之二 SharedPreferences

原创 2011年01月11日 10:45:00

 在此之前的学习内容是数据存储之一文件存储。在本地存储中常用的有,文件、配置文件、数据库。前面的学习主要是针对本地文件的。我认为可以把SharedPreferences看做是配置文件,虽然它也是采用XML格式存储的。

 

       比如我们使用的桌面软件中,通常会有一个选项菜单,选项是对软件的常规或核心设置。在Android中我们使用SharedPreferences来完成这种对配置文件的读写。在JavaSEJavaEE中常用的是*.properties,在Windows平台下常使用*.ini文件。

 

       下面,我们编写一个使用SharedPreferences读写配置文件的小例子。

 

       1.创建Android工程

       Project name:AndroidSharedPreferences

       BuildTarget:Android2.1

       Application name:Android 应用程序配置

       Package name:com.changcheng.sharedpreferences

       Create Activity:AndroidSharedPreferences

       Min SDK Version:7

 

       2.编辑strings.xml

<?xml version="1.0" encoding="utf-8"?>

<resources>

    <string name="hello">Hello World, AndroidSharedPreferences!</string>

    <string name="app_name">Android 应用程序配置</string>

    <string name="tv_name">姓名</string>

    <string name="tv_age">年龄</string>

    <string name="bt_write">设置</string>

    <string name="bt_read">读取</string>

    <string name="save_success">保存成功</string>

    <string name="save_failed">保存失败</string>

</resources>

 

       3.编辑main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

         android:orientation="vertical" android:layout_width="fill_parent"

         android:layout_height="fill_parent">

         <!-- 姓名 -->

         <RelativeLayout android:layout_width="fill_parent"

                   android:layout_height="wrap_content">

                   <TextView android:layout_width="70dip" android:layout_height="wrap_content"

                            android:textSize="25dip" android:id="@+id/tv_name" android:text="@string/tv_name" />

                   <EditText android:layout_width="300dip"

                            android:layout_height="wrap_content" android:layout_toRightOf="@id/tv_name"

                            android:id="@+id/et_name" />

         </RelativeLayout>

         <!-- 年龄 -->

         <RelativeLayout android:layout_width="fill_parent"

                   android:layout_height="wrap_content">

                   <TextView android:layout_width="70dip" android:layout_height="wrap_content"

                            android:textSize="25dip" android:id="@+id/tv_age" android:text="@string/tv_age" />

                   <EditText android:layout_width="300dip"

                            android:layout_height="wrap_content" android:layout_toRightOf="@id/tv_age"

                            android:id="@+id/et_age" />

         </RelativeLayout>

         <!-- 按钮 -->

         <RelativeLayout android:layout_width="fill_parent"

                   android:layout_height="wrap_content" android:gravity="right">

                   <Button android:layout_width="wrap_content"

                            android:layout_height="wrap_content" android:text="@string/bt_write"

                            android:id="@+id/bt_set" />

                   <Button android:layout_width="wrap_content"

                            android:layout_height="wrap_content" android:layout_toRightOf="@id/bt_set"

                            android:text="@string/bt_read" android:id="@+id/et_read" />

         </RelativeLayout>

</LinearLayout>

 

       4.为按钮添加事件代码

package com.changcheng.sharedpreferences;

 

import android.app.Activity;

import android.content.Context;

import android.content.SharedPreferences;

import android.content.SharedPreferences.Editor;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

import android.widget.Toast;

 

public class AndroidSharedPreferences extends Activity {

 

         private static final String TAG = "AndroidSharedPreferences";

         private EditText etName;

         private EditText etAge;

 

         /** Called when the activity is first created. */

         @Override

         public void onCreate(Bundle savedInstanceState) {

                   super.onCreate(savedInstanceState);

                   setContentView(R.layout.main);

                   // 获取按钮

                   Button btSet = (Button) this.findViewById(R.id.bt_set);

                   Button btRead = (Button) this.findViewById(R.id.bt_read);

                   // 获取编辑框

                   etName = (EditText) this.findViewById(R.id.et_name);

                   etAge = (EditText) this.findViewById(R.id.et_age);

                   // 添加事件

                   btSet.setOnClickListener(new OnClickListener() {

                            @Override

                            public void onClick(View v) {

                                     // 获取名称和年龄

                                     String name = etName.getText().toString();

                                     String age = etAge.getText().toString();

                                     // 创建SharedPreferences

                                     SharedPreferences sp = getSharedPreferences("preferences",

                                                        Context.MODE_PRIVATE);

                                     // 添加数据

                                     Editor editor = sp.edit();

                                     editor.putString("name", name);

                                     editor.putInt("age", Integer.parseInt(age));

                                     // 保存数据

                                     if (editor.commit())

                                               Toast.makeText(AndroidSharedPreferences.this,

                                                                 R.string.save_success, 1).show();

                                     else

                                               Toast.makeText(AndroidSharedPreferences.this,

                                                                 R.string.save_failed, 1).show();

                            }

                   });

                   btRead.setOnClickListener(new OnClickListener() {

                            @Override

                            public void onClick(View v) {

                                     // 创建SharedPreferences

                                     SharedPreferences sp = getSharedPreferences("preferences",

                                                        Context.MODE_PRIVATE);

                                     // 获取数据

                                     String name = sp.getString("name", "defName");

                                     String age = sp.getInt("age", 0) + "";

                                     // 显示数据

                                     etName.setText(name);

                                     etAge.setText(age);

                            }

                   });

         }

}

 

       5.运行程序

       启动模拟器,运行程序。输入名称和年龄,点击保存。我们使用的代码是getSharedPreferences("preferences",Context.MODE_PRIVATE);,当然commit时。它会为我们为”/data/data/com.changcheng.sharedpreferences/shared_prefs/preferences.xml”。将 preferences.xml导出,查看它的内容为:

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

<map>

<string name="name">长城</string>

<int name="age" value="25" />

</map>


      
将名称和年龄编辑框的内容清空,然后点击读取按钮,刚才写出的内容被读取进来。 SharedPreferences的使用就是这么简单。

 

       6.其他程序访问本程序的配置

       通过SharedPreferences创建的配置文件,不需要指定路径和文件后缀名,读取的时候也是。通常情况下,配置只是提供给本应用程序使用的。在这里我们介绍一个小知识点,即其他程序想使用本应用程序的配置,那应该如何使用SharedPreferences呢?如下:

Context otherAppContext = createPackageContext("com.changcheng.sharedpreferences", Context.CONTEXT_IGNORE_SECURITY);

SharedPreferences sharedPreferences = otherAppContext.getSharedPreferences("preferences", Context.MODE_WORLD_READABLE);

 

       注意,为了使其他程序可以访问本应用程序的配置。那么在我们使用 getSharedPreferences创建配置的时候必须为它的文件访问模式设置为允许其他程序读取或写入等。

Android SharedPreferences存储数据的使用方法

SharedPreferences是Android中最容易理解的数据存储技术,实际上SharedPreferences处理的就是一个key-value(键值对)。SharedPreferences常用...
  • qq_25835645
  • qq_25835645
  • 2015年07月18日 15:53
  • 781

Android数据存储之SharedPreferences及如何安全存储

前言:     最近一直在学习Android的数据存储,当学习到SharedPreferences的时候让我回想起了ios的NSUserDefaults,其实这两个真是异曲同工的,实现方式都是通过x...
  • andy_jiangbin
  • andy_jiangbin
  • 2017年02月13日 10:35
  • 833

Android中实现本地缓存,存储(SharedPreferences存储)

SharedPreferences轻量级缓存技术        SharedPreferences是Android平台上一个轻量级的存储类,用来保存应用的一些常用配置。暂时将Activity的状...
  • qq_39218478
  • qq_39218478
  • 2017年08月01日 20:54
  • 255

Android中的5种数据存储方式之——SharedPreferences

Android中的5种数据存储方式之——SharedPreferences简介 SharedPreferences是Android平台上一个轻量级数据存储方式,用来保存应用的一些常用配置,比如Acti...
  • zhan1350441670
  • zhan1350441670
  • 2015年07月27日 19:06
  • 1830

在Android中使用SharedPreferences存储数据以实现数据共享

在Android中,我们可以使用SharedPreferences来保存数据,以实现数据的共享。 (以一个用户登录为例) 简介: 首先我们需要了解一下SharedPreferences类,Share...
  • Wetsion
  • Wetsion
  • 2016年06月11日 16:56
  • 766

SharedPreferences存储用户自定义类

使用JSON和SharedPreferences存储用户自定义类SharedPreferences可以用来永久地存储数据,即使应用被销毁。事实上数据存储在Android的内部存储器上。有两种分方法用来...
  • qwer4755552
  • qwer4755552
  • 2016年11月18日 14:44
  • 647

android 学习笔记 将数据存储到SharedPreferences中 并且读取数据

要想使用SharedPreferences来存储数据,首先需要获取到SharedPreferences对象。Android中主要提供了三种方法用于得到SharedPreferences对象。     ...
  • chen81751565
  • chen81751565
  • 2015年08月25日 09:43
  • 902

安卓数据持久化:文件存储、SharedPreferences存储以及数据库存储

Android系统中主要提供了三种方式用于简单的实现数据持久化功能: 文件存储(手机自带的内存)、SharedPreferences存储以及数据库存储 当然还可以用sd卡存储 读入写出 下面是疯狂ja...
  • hll174
  • hll174
  • 2015年05月15日 22:12
  • 1705

Android的内外存储、SharedPreferences(偏好设置)及获取空间使用情况

一、Android的外部存储           首先明确,不管安卓手机是否有可移动的sdcard,他们总是有外部存储和内部存储。最关键的是,我们都是通过相同的api来访问可移动的sdcard或者手机...
  • daijin888888
  • daijin888888
  • 2016年04月10日 22:06
  • 1006

使用SharedPreferences存储和读取数据

转:http://www.worlduc.com/blog2012.aspx?bid=19403392 1、任务目标 (1)掌握Android中SharedPreferences的使用方法。 ...
  • myinc
  • myinc
  • 2014年11月27日 14:48
  • 1768
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据存储之二 SharedPreferences
举报原因:
原因补充:

(最多只允许输入30个字)