数据存储--偏好设置
·偏好设置(SharedPreference)提供了一种以键值对(K-V)的形式
保存并读取持久数据的方式;
·偏好设置的本质是使用XML文件保存数据,但开发人员无须考虑xml文件的
解析问题,仅需像使用Map一样使用偏好设置即可;
·偏好设置属于应用程序私有,仅应用程序本身可访问;
·偏好设置一般用于保存用户信息,用户设置等数据量较小的数据;
·偏好设置的文件保存在/data/data/应用程序包名/shared_prefs/文件夹下;
SharedPreferences 接口
·在Android系统中,使用SharedPreferences接口的对象实现偏好设置的读取与写入;
·使用ContextWrapper类定义的getSharedPreferences()方法即可获取SharedPreference接口的对象;
该方法的签名为:
public SharedPreferences getSharedPreferences(String name ,int mode)
第一个参数是文件名第二个参数是权限
写入偏好设置:
·在写入偏好设置时,需要使用Editor对象,通过ShardPreferences的edit()方法即可获取该对象;
读取偏好设置:
·在获取到SharedPreferences对象之后,直接调用get系列方法即可获取所需数据,例如String getString(String key,String defValue);
使用偏好设置保存数据:
·偏好设置(SharedPreference)提供了一种以键值对(K-V)的形式
保存并读取持久数据的方式;
·偏好设置的本质是使用XML文件保存数据,但开发人员无须考虑xml文件的
解析问题,仅需像使用Map一样使用偏好设置即可;
·偏好设置属于应用程序私有,仅应用程序本身可访问;
·偏好设置一般用于保存用户信息,用户设置等数据量较小的数据;
·偏好设置的文件保存在/data/data/应用程序包名/shared_prefs/文件夹下;
SharedPreferences 接口
·在Android系统中,使用SharedPreferences接口的对象实现偏好设置的读取与写入;
·使用ContextWrapper类定义的getSharedPreferences()方法即可获取SharedPreference接口的对象;
该方法的签名为:
public SharedPreferences getSharedPreferences(String name ,int mode)
第一个参数是文件名第二个参数是权限
写入偏好设置:
·在写入偏好设置时,需要使用Editor对象,通过ShardPreferences的edit()方法即可获取该对象;
·通过Editor的put系列方法即可写入数据,例如putString(String key,String value);
· 写入完成后,应该调用Editor的commit()方法提交,以完成写入过程
//写入数据到SharedPreferences
SharedPreferences sp = getSharedPreferences(fileName,MODE_PRIVATE);
Editor editor = sp.edit();
editor.putString("username", username);
editor.putInt("age", age);
editor.commit();
读取偏好设置:
·在获取到SharedPreferences对象之后,直接调用get系列方法即可获取所需数据,例如String getString(String key,String defValue);
//读取数据
SharedPreferences sp = getSharedPreferences(fileName, MODE_PRIVATE);
String username = sp.getString("username", null);//第二个参数代表找不到的情况给一个null
int age = sp.getInt("age", -1);
使用偏好设置保存数据:
案例:
MainActivity.java
package com.example.sharedpreference_tm;
import android.os.Bundle;
import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText mUsernameET,mAgeET;
private String fileName = "config";//这里的文件名不需要填扩展名,android系统会自动加上.xml
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAgeET = (EditText) findViewById(R.id.et_age);
mUsernameET = (EditText) findViewById(R.id.et_username);
//读取数据
SharedPreferences sp = getSharedPreferences(fileName, MODE_PRIVATE);
String username = sp.getString("username", null);//第二个参数代表找不到的情况给一个null
int age = sp.getInt("age", -1);
if(username != null){
mUsernameET.setText(username);
}
if (age!=-1) {
mAgeET.setText(age+""); /*
int值不要直接往做为EditText的setText()方法的参数,
因为会setText()有好多重载方法,传入int会调用
void android.widget.TextView.setText(int resid)
会当成资源id当成资源的索引
*/
}
}
public void savePrefs(View v){
String username = mUsernameET.getText().toString();
int age = Integer.valueOf(mAgeET.getText().toString());
//写入数据到SharedPreferences
SharedPreferences sp = getSharedPreferences(fileName,MODE_PRIVATE);
Editor editor = sp.edit();
editor.putString("username", username);
editor.putInt("age", age);
editor.commit();
Toast.makeText(this, "保存成功", Toast.LENGTH_LONG).show();
}
}