Android的数据存储
在Android系统中,每个应用软件数据(包括文件)为该应用软件所私有。但是,Android同样也提供了一种标准方式或接口,让应用软件将私有数据开放,供其他应用软件使用。
在Android中,存储方式有:SharedPreferences、文件存储、SQLite数据库、Content provider(内容提供器)和网络。
1. SharedPreferences方式
SharedPreferences是一种轻量级存储方式,适合存储登陆信息、个人基本信息等简单的key-value形式的值,它可以保存一些基本的数据类型,如String,int,Boolean等。下面通过简单实例来讲解,功能是存储个人基本信息。代码如下:
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.sharedpreferences);
nameET = (EditText)findViewById(R.id.name);
sexET = (EditText)findViewById(R.id.sex);
habitET = (EditText)findViewById(R.id.habit);
employeeCB = (CheckBox)findViewById(R.id.isEmployee);
companySize = (RadioGroup)findViewById(R.id.companySize);
bigCompany = (RadioButton) findViewById(R.id.bigCompany);
mediumCompany = (RadioButton) findViewById(R.id.mediumCompany);
smallCompany = (RadioButton) findViewById(R.id.smallCompany);
//注册CheckBox对象状态变化的监听端口
employeeCB.setOnCheckedChangeListener(this);
SharedPreferences sharedPreferences = getSharedPreferences(NAME_SHARED, Activity.MODE_PRIVATE);
//如果name不存在,以""代替
nameET.setText(sharedPreferences.getString("name", ""));
sexET.setText(sharedPreferences.getString("sex",""));
habitET.setText(sharedPreferences.getString("habit", ""));
employeeCB.setChecked(sharedPreferences.getBoolean("isEmployee", false));
companySize.check(sharedPreferences.getInt("companySize", -1));
onCheckedChanged(employeeCB, employeeCB.isChecked());
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
System.out.println("---onCheckedChanged");
bigCompany.setEnabled(isChecked);
mediumCompany.setEnabled(isChecked);
smallCompany.setEnabled(isChecked);
}
@Override
protected void onStop()
{
//退出时保存数据,首先获取SharedPreferences对象,
SharedPreferences mySharedPreferences = getSharedPreferences(NAME_SHARED, Activity.MODE_PRIVATE);
SharedPreferences.Editor myEditor = mySharedPreferences.edit();
myEditor.putString("name", nameET.getText().toString());
myEditor.putString("sex",sexET.getText().toString());
myEditor.putString("habit", habitET.getText().toString());
myEditor.putBoolean("isEmployee", employeeCB.isChecked());
myEditor.putInt("companySize", companySize.getCheckedRadioButtonId());
//提交数据,保存
myEditor.commit();
super.onStop();
}
用户点击“是否工作”,程序会根据其状态来确定是否会显示公司规模,当所有都选择完成后,用户退出程序,程序会调用onStop(),自动保存当前所有的数据,首先,获取通过getSharedPreferences()获取SharedPreferences对象,在通过SharedPreferences对象获取SharedPreferences.Editor对象,利用SharedPreferences.Editor对象完成数据的存储与获取。
保存的数据会以XML形式保存,保存位置为:/data/data/<package name>/shared_prefs/xxx.xml 在DDMS中的File Explorer中可以看到。这个文件可以导出来查看,如下:
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
- <map>
<int name="companySize" value="2131034129" />
<string name="sex">man</string>
<string name="habit">music</string>
<boolean name="isEmployee" value="true" />
<string name="name">wanglejun</string>
</map>