Android 数据存储01之SharedPreferences
版本 |
修改内容 |
日期 |
修改人 |
V1.0 |
原始版本 |
2013/2/20 |
skywang |
1 SharedPreferences概括
SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,一般在Activity中 重载窗口状态onSaveInstanceState保存一般使用SharedPreferences完成,它提供了Android平台常规的Long长 整形、Int整形、String字符串型的保存。
它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。
其存储位置在/data/data/<包名>/shared_prefs目录下。
SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过SharedPreferences.Editor对象实现。
实现SharedPreferences存储的步骤如下:
一、根据Context获取SharedPreferences对象
二、利用edit()方法获取SharedPreferences.Editor对象。
三、通过SharedPreferences.Editor对象存储key-value键值对数据。
四、通过commit()方法提交数据。
2 SharedPreferences接口说明


3 示例代码
package com.skywang.data; import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.content.SharedPreferences;
import android.content.res.Resources;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Iterator; public class SharedReferenceTest extends Activity { private static final String TAG = "skywang-->HelloAndroid"; private static final String SP_FILE_NAME = "sp_test";
private static final String SP_CHI_NAME = "chi_name";
private static final String SP_ENG_NAME = "eng_name";
private static final String SP_AGE = "age";
private static final String SP_CHINESE = "chinese"; // SharedPreferences对象
private SharedPreferences sp = null;
// SharedPreferences编辑器
private SharedPreferences.Editor editor = null; private SharedPreferences.OnSharedPreferenceChangeListener listener =
new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(SharedPreferences sp, String key) {
Log.d(TAG, "onSharedPreferenceChanged:key="+key);
if (SP_CHI_NAME.equals(key))
Log.d(TAG, "onSharedPreferenceChanged:value="+sp.getString(key, null));
}
}; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.shared_reference_test); sp = getSharedPreferences(SP_FILE_NAME, MODE_PRIVATE);
// 监听
sp.registerOnSharedPreferenceChangeListener(listener); // 编辑并保存数据
editor = sp.edit();
editor.putString(SP_CHI_NAME, "kitty");
editor.putString(SP_ENG_NAME, "nick01");
editor.putString(SP_ENG_NAME, "nick02");
editor.putInt(SP_AGE, 11);
editor.putBoolean(SP_CHINESE, true);
editor.commit(); // 测试
Log.d(TAG, "chi_name="+sp.getString(SP_CHI_NAME, null));
Log.d(TAG, "eng_name="+sp.getString(SP_ENG_NAME, null));
Log.d(TAG, "contains(other_name)="+ sp.contains("other_name"));
Log.d(TAG, "other_name="+sp.getString("other_name", "none")); // 测试getAll() 接口
Map<?,?> map = (Map<?,?>)sp.getAll();
Log.d(TAG, "map.size()="+map.size());
Iterator iterator=map.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry<?, ?> entry= (Entry<?, ?>) iterator.next();
Log.d(TAG, "key:"+entry.getKey()+", value:"+entry.getValue());
}
} @Override
public void onDestroy() {
super.onDestroy();
if (sp!=null)
sp.unregisterOnSharedPreferenceChangeListener(listener);
}
}
参考文献:
1,Android API文档
2,Android实现数据存储技术:http://www.cnblogs.com/hanyonglu/archive/2012/03/01/2374894.html