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中使用
例子:——通过点击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保存的数据
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。