Android 数据存储——SharedPreference

作为一个完成的应用程序,数据存储操作是必不可少的,因此,Android系统提供了四种数据储存方式,分别是:SharedPreference、File、SQLite以及Content Provider。由于Android系统中,数据基本都是私有的,都是存放于"data/data/程序包名"目录下,所有要实现数据共享,正确方式使用Content Provider。

SQLite:SQLite是一个轻量级的数据库,支持基本SQL语法,是常被采用的一种数据存储方式。Android为此数据库提供了一个名为SQLiteDatebase的类型,封装了一些操作数据库的API。

SharedPreference:除SQLite数据库外,另一种常用的数据存储方式,其本质就是一个xml文件,常用于存储较简单的参数设置。

File:即常说的文件(I/O)存储方式,常用存储大量数量的数据,但是缺点是更新数据将是一件困难的事情。

ContentProvider:Android系统中能实现所有应用程序共享的一种数据存储方式,由于数据通常在各应用间的互相私密的,所有此存储方式较少使用,但是其又是必不可少的一种存储方式。例如音频、视频、图片和通讯录,一般都可以采用此种方式进程存储。每个ContentProvider都会对外提供一个公共的URI(包装成Uri对象),如果应用程序有数据需要共享,就需要使用ContentProvider为这些数据定义一个URI,然后其他应用程序就通过Content Provider传入这个URI来对数据进行操作。

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

SharedPreference对象与SQLite数据库相比,免去了创建数据库、创建表、写SQL语句等诸多操作,相对而言更加方便、简洁。但是SharedPreference也有其自身缺陷,比如其职能存储boolean、int、float、long和String五种简单的数据类型,比如其无法进行条件查询等。所有无论SharedPreference的数据存储操作是如何简单,它也只能是存储方式的一种补充,而无法完全替代如SQLite数据这样的其他数据存储方式。

SharedPreference存储方式操作步骤

一、根据Context获取SharedPreference对象

  • 调用Context对象的getSharedPreference()方法,该方法获得的SharedPreference对象可以被同一个应用程序下的其他组件共享
  • 调用Activity对象的getPreference()方法,该方法获得的SharedPreference对象只能在该Activity中使用
二、利用SharedPreference对象中的edit()方法获得Editor对象
三、通过Editor对象存储key-value键值对数据
四、通过Editor对象的commit()方法提交数据

SharedPreference的四种操作模式
Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用程序本身访问,在该模式下,写入的内容会覆盖原文件的内容
Context.MODE_APPEND:该模式会检查文件是否存在,存在就往文件中追加内容,否则就创建新文件
Context.MODE_WORLD_READABLE:表示当前文件可以被其他应用读取
Context.MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入

例子:——通过点击TextView,来获取SharedPreference保存的数据

AndroidManifest.xml——没有做任何修改,创建工程默认

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.sharedpreferencedemo"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="19" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.sharedpreferencedemo.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

</LinearLayout>
MainActivity.java

package com.example.sharedpreferencedemo;

import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;

public class MainActivity extends Activity {
	private TextView textView;
	private SharedPreferences sharedPreferences;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        /*1、获取SharedPreference对象,此参数一hello指定了保存的文件名称*/
        sharedPreferences = getSharedPreferences("hello", MODE_PRIVATE);
        /*2、存入数据,可以存入多种类型数据,数据通过key键值标记对应数据*/
        Editor editor = sharedPreferences.edit();
        editor.putString("string", "hello world.");
        editor.putInt("int", 10);
        editor.putBoolean("boolean", true);
        /*3、提交数据*/
        editor.commit();
        
        
        textView = (TextView)this.findViewById(R.id.textView);
        textView.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				//如果键值不存在,则返回第二个参数的数据
				String string = sharedPreferences.getString("string", "")
								+"\n"
								+sharedPreferences.getInt("int", 0)
								+"\n"
								+sharedPreferences.getBoolean("boolean", false);
				textView.setText(string);
				textView.setTextSize(20);
			}
		});
    }
    
}
下载程序

当运行此程序后,数据就保存在/data/data/com.example.sharedpreferencedemo/shared_prefs/hello.xml文件中。进入Window->Show View->Other->Androd->File Explorer
下查看文件

技术分享
点击File Explorer对话框中的右上角第一个按钮从收据将hello.xml文件导出到电脑中,可查看其内容

技术分享

内容如下

技术分享

程序测试:——点击TextView,获取SharedPreference保存的数据

技术分享



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。