在Android中,可供选择的存储方式有SharedPreferences、文件存储、SQLite数据库方式、内容提供器(Content provider)和网络。
今儿个咱学SharedPreferences:
有些时候,应用程序有少量的数据需要保存,而且这些数据的格式很简单:都是普通的字符串、标量类型的值等,比如应用程序的各种配置信息、小游戏的于玩家积分等,对于这种数据,提供了SharedPreferences进行保存;可以想象它是一个小小的Cookie,它通过用键值对的方式把简单数据类型(boolean、int、float、long和String)存储在应用程序的私有目录下(data/data/包名/shared_prefs/)自己定义的xml文件中。
1、说明
它提供一种轻量级的数据存储方式,通过eidt()方法来修改里面的内容,通过Commit()方法来提交修改后的内容。
2、重要方法
public abstract boolean contains (Stringkey) :检查是否已存在该文件,其中key是xml的文件名。
edit():为preferences创建一个编辑器Editor,通过创建的Editor可以修改preferences里面的数据,但必须执行commit()方法。
getAll():返回preferences里面的多有数据。
getBoolean(String key, boolean defValue):获取Boolean型数据
getFloat(String key, float defValue):获取Float型数据
getInt(String key, int defValue):获取Int型数据
getLong(String key, long defValue):获取Long型数据
getString(String key, String defValue):获取String型数据
registerOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListenerlistener):注册一个当preference发生改变时被调用的回调函数。
unregisterOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListenerlistener):删除当前回调函数。
3、重要接口SharedPreferences.Editor
用于修改SharedPreferences对象的内容,所有更改都是在编辑器所做的批处理,而不是复制回原来的SharedPreferences或持久化存储,直到你调用commit(),才将持久化存储。重要方法:
clear():清除内容。
commit():提交修改
remove(String key):删除preference
下面通过一个简单的实例来示范如何向SharedPreferences中写入、读取数据;
布局文件很简单:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="horizontal"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:gravity="center_horizontal"
- >
- <Button
- android:id="@+id/write"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/write"
- />
- <Button
- android:id="@+id/read"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/read"
- />
- </LinearLayout>
程序代码如下:
- package org.crazyit.io;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import android.app.Activity;
- import android.content.SharedPreferences;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.Toast;
- public class SharedPreferencesTest extends Activity
- {
- SharedPreferences preferences;
- SharedPreferences.Editor editor;
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- // 获取只能被本应用程序读、写的SharedPreferences对象
- preferences = getSharedPreferences("crazyit", MODE_WORLD_READABLE);
- editor = preferences.edit();
- Button read = (Button) findViewById(R.id.read);
- Button write = (Button) findViewById(R.id.write);
- read.setOnClickListener(new OnClickListener()
- {
- @Override
- public void onClick(View arg0)
- {
- //读取字符串数据
- String time = preferences.getString("time", null);
- //读取int类型的数据
- int randNum = preferences.getInt("random", 0);
- String result = time == null ? "您暂时还未写入数据"
- : "写入时间为:" + time
- + "\n上次生成的随机数为:" + randNum;
- //使用Toast提示信息
- Toast.makeText(SharedPreferencesTest.this ,
- result , 5000)
- .show();
- }
- });
- write.setOnClickListener(new OnClickListener()
- {
- @Override
- public void onClick(View arg0)
- {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 "
- + "hh:mm:ss");
- // 存入当前时间
- editor.putString("time", sdf.format(new Date()));
- // 存入一个随机数
- editor.putInt("random", (int) (Math.random() * 100));
- // 提交所有存入的数据
- editor.commit();
- }
- });
- }
- }
简单的界面如下图: