Android 数据存储——SharedPreference

时间:2020-12-04 05:35:17

作为一个完成的应用程序,数据存储操作是必不可少的,因此,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
下查看文件

Android 数据存储——SharedPreference
点击File Explorer对话框中的右上角第一个按钮从收据将hello.xml文件导出到电脑中,可查看其内容

Android 数据存储——SharedPreference

内容如下

Android 数据存储——SharedPreference

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

Android 数据存储——SharedPreference