Android 数据存储之_SharedPreferences
SharedPreferences是 Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,一些默认欢迎语 登录的用户名和密码等。一般在Activity中 重载窗口状态onSaveInstanceState保存一般使用SharedPreferences完成,它提供了Android平台常规的Long长 整形、Int整形、String字符串型的保存。对于常规的轻量级而言比SQLite要好不少,如果真的存储量不大可以考虑自己定义文件格式。xml 处理时Dalvik会通过自带底层的本地XML Parser解析,比如XMLpull方式,这样对于内存资源占用比较好。
通过SharedPreferences可以将NVP(Name-value pair 名称-值对【又称键值对】)保存在android的文件系统中,而且通过SharedPreferences对文件系统的操作过程完全是屏蔽的。这样仅需要通过调用SharedPreferences 对键值对很方便的进行保存和读取。
在Android系统中,这些信息以XML文件的形式保存在 /data/data/PACKAGE_NAME /shared_prefs 目录下。
SharedPreferences的使用非常简单,能够轻松的存放数据和读取数据。 SharedPreferences只能保存简单类型的数据,例如,String、int等。一般会将复杂类型的数据转换成Base64编码,然后将转换 后的数据以字符串的形式保存在 XML文件中,再用SharedPreferences保存。
使用SharedPreferences保存key-value对的步骤如下:
(1)使用Activity类的getSharedPreferences方法获得SharedPreferences对象,其中存储key-value的文件的名称由getSharedPreferences方法的第一个参数指定。
[java]view plaincopy
SharedPreferences loinPasswd = getSharedPreferences(NAPASS, MODE_PRIVATE);
// Context.MODE_PRIVATE 访问模式
SharedPreferences 支持三中访问模式
MODE_PRIVATE
MODE_WORLD_READABLE
MODE_WORLD_WRITEABLE
// file:SharedPreferences的名称。这个名称和anroid文件系统中保存的文件名同名。
(2)使用SharedPreferences接口的edit获得SharedPreferences.Editor对象。
eg:
SharedPreferences.Editor loinpasswdedit = loinPasswd.edit();
(3)通过SharedPreferences.Editor接口的putXxx方法保存key-value对。其中Xxx表示不同的数据类型。例如:字符串类型的value需要用putString方法。
(4)通过SharedPreferences.Editor接口的commit方法保存key-value对。commit方法相当于数据库事务中的提交(commit)操作。
loinpasswdedit.putString(NAME, etName.getText().toString());
loinpasswdedit.putString(PASSWD, "");
loinpasswdedit.commit();
具体代码的书写流程为:
A、存放数据信息
// 第一步 获得SharedPreferences对象 如果存在则打开,如果不存在则创建。loinPasswd.xml
SharedPreferences loinPasswd = getSharedPreferences(NAPASS,
MODE_PRIVATE);
// 第二步 是对象可编辑,通过对象SharedPreferences.Editor
SharedPreferences.Editor loinpasswdedit = loinPasswd.edit();
// 第三步 SharedPreferences是通过键值对的形式存储数据的,把值put到对应的键上。
loinpasswdedit.putString(NAME, etName.getText().toString());
loinpasswdedit.putString(PASSWD, etPassWd.getText()
.toString());
// 修改好 一定要提交
loinpasswdedit.commit();
B、读取数据信息
// 第一步 获得SharedPreferences对象 打开loinPasswd.xml文件
SharedPreferences loinpasswd = getSharedPreferences(NAPASS, 0);
// 第二步 根据键值对 把对应的值取出来
String name = loinpasswd.getString(NAME, "").toString();
String passwd = loinpasswd.getString(PASSWD, "").toString();
对应的数据保存在:
File Explorer /<package name>/shared_prefs/loinPasswd.xml
主要代码 具体如下(仅供参考):
public class MainActivity extends ActionBarActivity {
protected static final String NAPASS = "loinPasswd";
protected static final String NAME = "name";
protected static final String PASSWD = "passwd";
protected static final String TAG = "com.example.sharepreferences.MainActivity";
private static EditText etName;
private static EditText etPassWd;
private static CheckBox checkBox;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etName = (EditText) findViewById(R.id.et_name);
etPassWd = (EditText) findViewById(R.id.et_passwd);
Button button = (Button) findViewById(R.id.bt_login);
checkBox = (CheckBox) findViewById(R.id.cb_rem);
// 得到name passwd
getlogininfo();
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (checkBox.isChecked()) {
// 保存数据到SharedPreferences
Log.i(TAG, "checkBox isClickable ");
// 第一步 获得SharedPreferences对象 如果存在则打开,如果不存在则创建。loinPasswd.xml
SharedPreferences loinPasswd = getSharedPreferences(NAPASS,
MODE_PRIVATE);
// 第二步 是对象可编辑,通过对象SharedPreferences.Editor
SharedPreferences.Editor loinpasswdedit = loinPasswd.edit();
// 第三步 SharedPreferences是通过键值对的形式存储数据的,把值put到对应的键上。
loinpasswdedit.putString(NAME, etName.getText().toString());
loinpasswdedit.putString(PASSWD, etPassWd.getText()
.toString());
// 修改好 一定要提交
loinpasswdedit.commit();
} else {
Log.i(TAG, "checkBox is not Clickable ");
SharedPreferences loinPasswd = getSharedPreferences(NAPASS,
MODE_PRIVATE);
SharedPreferences.Editor loinpasswdedit = loinPasswd.edit();
loinpasswdedit.putString(NAME, etName.getText().toString());
loinpasswdedit.putString(PASSWD, "");
loinpasswdedit.commit();
}
}
});
}
private void getlogininfo() {
// 得到数据从SharedPreferences
// 第一步 获得SharedPreferences对象 打开loinPasswd.xml文件
SharedPreferences loinpasswd = getSharedPreferences(NAPASS, 0);
// 第二步 根据键值对 把对应的值取出来
String name = loinpasswd.getString(NAME, "").toString();
String passwd = loinpasswd.getString(PASSWD, "").toString();
etName.setText(name);
etPassWd.setText(passwd);
}
}
另外SharedPreferences 不仅能够保存数据,还可以实现不同应用程序间的数据共享。
如果将SharedPreferences的访问模式设置为全局读或者全局写。其他应用程序就可以读或写本应用的SharedPreferences数据。
访问者要知道共享者的包名称和SharedPreferences名称。通过context获得SharedPreferences对象。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。