原帖子地址:http://liangruijun.blog.51cto.com/3061169/658521
一.Preference的简介
Preference(配置)提供了一种轻量级的数据存取方法,主要应用于数据比较少的配置信息。它以“key-value”(是一个Map)对的方式将数据保存在一个XML配置文件中,例如,手机的开机问候语,可以将其以Preference方式来进行配置。也可以保存一些用户个性化设置的字体、颜色、位置等参数信息。
二.Preference存取数据的方法
使用到的接口:
SharedPreferences接口和SharedPreferences.Editor接口,它们都是来自于andorid.content包。
①SharedPreferences接口提供保存数据的方法
我们可以调用Context.getSharedPreferences(String name,int mode)方法得到SharedPreferences接口。该方法的第一个参数是文件名称,第二个参数是操作模式。操作模式有三种:
- MODE_PRIVATE(私有)
- MODE_WORLD_READABLE(可读)
- MODE_WORLD_WRITEABLE(可写)
SharedPreferences接口的常用方法
方法名称 |
方法描述 |
edit() |
返回SharedPreferences的内部接口SharedPreferences.Editor |
contains(String key) |
判断是否包含该键值 |
getAll() |
返回所有配置信息Map |
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值 |
②SharedPreferences.Editor接口提供获得数据的方法
SharedPreferences.Editor接口中的getString(String key,String defValue)、getInt(String key,int defValue)等。调用SharedPreferences的edit()方法返回SharedPreferences.Editor内部接口,该接口中提供了保存数据的方法,如putString(String key,String value)、pubInt(String key,int value)等,调用该接口的commit方法可以将数据进行保存。
SharedPreferences.Editor接口常用的方法
方法名称 |
方法描述 |
clear() |
清楚所有值 |
commit() |
保存 |
getAll() |
返回所有配置信息Map |
putBoolean(String key,Boolean value) |
保存一个boolean值 |
putFloat(String key,float value) |
保存一个float值 |
putInt(String key,int value) |
保存一个int值 |
putLong(String key,long value) |
保存一个long值 |
putString(String key,String value) |
保存一个String值 |
remove(String key) |
删除该键对应的键 |
下面是保存临时记事本内容的例子
当我们在手机上用记事本编写备忘录,日志的时候,突然要返回接电话,看短信的时候。我们就要停止编写,退出去听接电话,看短信。然而,当我们打完电话或者看完短信回来的时候,发现刚刚编写的内容还在记事本上,这就是Preference的作用了。
创建一个Activity,在其中放置一个EditText保存短信内容,放置一个Button用于发送信息。在onCreate()中通过getSharedPreferences()方法获得SharedPreferences接口,调用接口的getString()方法,获得保存内容,将内容设置到EditText中。
在onStop()方法中保存内容,使用getSharedPreferences().edit()方法获得SharedPreferences.Editor接口,调用SharedPreferences.Editor的putString()方法保存短信内容,调用commit()方法提交内容。
MainActivity.java
- package com.android.preference;
- import android.app.Activity;
- import android.content.SharedPreferences;
- import android.os.Bundle;
- import android.widget.Button;
- import android.widget.EditText;
- public class MainActivity extends Activity {
- private EditText myEditText;
- private Button btn;
- private static final String TEMP_INFO="temp_info";
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- myEditText = (EditText)findViewById(R.id.EditText1);
- btn = (Button)findViewById(R.id.Button1);
- //获得SharedPreferences实例
- SharedPreferences sp = getSharedPreferences(TEMP_INFO, MODE_WORLD_READABLE);
- //从SharedPreferences获得备忘录的内容
- String content = sp.getString("info_content", "");
- //在EditText中显示备忘录内容
- myEditText.setText(content);
- }
- @Override
- protected void onStop() {
- super.onStop();
- //获得编辑器
- SharedPreferences.Editor editor = getSharedPreferences(TEMP_INFO, MODE_WORLD_WRITEABLE).edit();
- //将EditText中的文本内容添加到编辑器
- editor.putString("info_content", myEditText.getText().toString());
- //提交编辑器内容
- editor.commit();
- }
- }
main.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="备忘录"
- />
- <EditText
- android:text=""
- android:id="@+id/EditText1"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- />
- <Button
- android:id="@+id/Button1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="保存"
- />
- </LinearLayout>
效果图:
当我们退出屏幕再返回的时候,发现原来备忘录里编辑了一半的内容还在那里,其实它是把要保存的内容做诶XML文件保存在/data/data/package/shsared_prefs/下面了。