什么是SharePreferences
SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数。
SharedPreferences保存数据,其背后是用xml文件存放数据,文件存放在/data/data/<package name>/shared_prefs目录下。
为什么用SharePreferences
SharePreferences是用XML文件来实现的,那么我们为什么要用它的,为什么不直接用XML文件呢?好吧,可能不会有人问这个问题,我就自己回答自己吧。因为对XML操作比较繁琐,既然有封装好的类,我们为什么不去使用呢!我们要做到简化编程,提高效率,所以使用SharePreferences是一个很好的选择,比自己去操作XML文件要方便的多。
怎样使用SharePreferences
SharePreferences的使用是比较简单的,不然封装就显得没有意义了。首先我们需要生成一个SharePreferences的对象,但是我们不能直接new一个对象出来,所以我们用下面的方法来得到一个对象。
SharedPreferences mSharedPreferences = getSharedPreferences("student_data", Context.MODE_PRIVATE);
在上面的代码中,我们可以看到用Activity中的getSharePreferences方法可以得到一个对象。此方法需要传两个参数,一个String的参数,表示XML文件的名称,但是不要带后缀名".xml",这点一定要注意,另一个是文件的操作模式,上面的操作模式是:私有方式存储,其他应用无法访问,共有四种操作模式:
1. MODE_APPEND: 追加方式存储
2. MODE_PRIVATE: 私有方式存储,其他应用无法访问
3. MODE_WORLD_READABLE: 表示当前文件可以被其他应用读取
4. MODE_WORLD_WRITEABLE: 表示当前文件可以被其他应用写入
得到SharePreferences的对象之后,我们就需要往XML文件里添加数据,添加数据的时候我们需要一个Editor类来帮助我们操作XML文件,我们首先生成一个Editor对象:
Editor mEditor = mSharedPreferences.edit();
mEditor.putString("name", mNameEdit.getText().toString()); mEditor.putString("age",mAgeEdit.getText().toString());
可以看到,用SharePreferences生成的对象来得到Editor的一个对象,然后通过对Editor对象的操作来对XML文件进行添加数据,我们已经添加了两条数据了。
读取已经保存好的数据时,我们用SharePreferences对象来读取数据:
String _Name = mSharedPreferences.getString("name", ""); String _Age = mSharedPreferences.getString("age", "");
这样我们就可以得到已经保存好的数据,对getString方法,我们需要传两个参数,第一个是我们的“key”来获取我们保存的内容,第二个是如果我们传入的“key”不存在,然么就返回第二个参数的内容,不过我在这里把它传入空字符串罢了,我们可以根据自己的情况传入合适的内容。
下面我给出自己的一个测试用例,代码基本很简单:
MainActivity.java
public class MainActivity extends Activity implements OnClickListener{ private EditText mNameEdit,mAgeEdit; private Button mSaveBtn,mShowBtn; private SharedPreferences mSharedPreferences; Editor mEditor; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initVariable(); initListener(); } private void initVariable() { /** * 实例化SharedPreferences对象 */ mSharedPreferences = getSharedPreferences("student_data", Context.MODE_PRIVATE); mEditor = mSharedPreferences.edit(); } private void initListener() { mSaveBtn.setOnClickListener(this); mShowBtn.setOnClickListener(this); } private void initView() { mNameEdit = (EditText) findViewById(R.id.et_name); mAgeEdit = (EditText) findViewById(R.id.et_age); mSaveBtn = (Button) findViewById(R.id.btn_save); mShowBtn = (Button) findViewById(R.id.btn_show); } @Override public void onClick(View v) { if(v.getId()==R.id.btn_save){ save(); }else if(v.getId()==R.id.btn_show){ show(); } } private void show() { String _Name = mSharedPreferences.getString("name", ""); String _Age = mSharedPreferences.getString("age", ""); mNameEdit.setText(_Name); mAgeEdit.setText(_Age); } private void save(){ mEditor.putString("name", mNameEdit.getText().toString()); mEditor.putString("age",mAgeEdit.getText().toString()); mEditor.commit(); } }