您的位置:首页 > 移动开发 > Android开发

Android开发从入门到放弃(3)使用SharedPreferences保存数据

2016-12-22 22:46 387 查看
在上一篇文章中我在
onSaveInstanceState
方法中暂时保存了Activity的状态,尽管这也比较有用,但是更多情况下,我们更希望持久化地存储一些简单的数据,例如,保存某些用户的设置,或存储当前游戏的最高分。本篇博客我们来使用SharedPreferences来保存点简单的数据。

接着上一节的例子,在MainActivity.java中,重载一个
onPause
方法,加入以下代码

@Override
protected void onPause() {
super.onPause();
SharedPreferences settings = getPreferences(MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putInt(KEY_COUNTER, mCounter);
editor.commit();
Log.i("SharedPreferences","SharedPreferences has been writen ,mCounter = " + mCounter);
}


通过
getPreferences
方法获取一个SharedPreferences对象,在调用SharedPreferences对象的edit方法获取一个SharedPreferences的编辑器对象,然后可以调用putXXX之类的方法来存放特定类型的键值对,最后调用
editor.commit()
来保存设置。

然后,在
onCreate
方法中来读取SharedPreferences中存储的值。

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

SharedPreferences settings = getPreferences(MODE_PRIVATE);
int defaultCounter = 0;
mCounter = settings.getInt(KEY_COUNTER, defaultCounter);
((TextView)findViewById(R.id.textViewCounter)).setText("Counter: " + Integer.toString(mCounter));
}


还是通过
getPreferences
方法来获取SharedPreferences对象,该对象可以直接调用getXXX方法来获取值。

此时,我做了个小测试,在另一个Activity中,通过
getPreferences
方法来获取SharedPreferences对象后,是获取不到我们刚才保存的值的。为什么呢?其实还有另一个方法可以获取到SharedPreferences对象,就是
getSharedPreferences(name,mode)
方法,第一个name是一个文件名,每个name都对应一个文件,也就意味着我们可以将不同类型的配置项分别存储在不同的文件中,文件的格式是XML,当然,这些基础的功能是Android系统已经提供好的,我们只需要简单地调用一下api就好了。而getPreferences方法会将当前activity类的全名作为name传递给getSharedPreferences方法。

接下来我们把代码稍加改造,为了能在一个activity中保存数据并且在另一个activity中来读取数据。

下面的代码用于在当app处于停止状态时保存状态到名字为mytest的SharedPreferences配置文件中。

public final static String PREF_NAME="mytest";
@Override
protected void onPause() {
super.onPause();
SharedPreferences settings = getSharedPreferences(PREF_NAME,MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putInt(KEY_COUNTER, mCounter);
editor.commit();
Log.i("SharedPreferences","SharedPreferences has been writen ,mCounter = " + mCounter);
}


接下来在另一个activity的onCreate方法中读取刚才保存的数据

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);

SharedPreferences settings = getSharedPreferences(MainActivity.PREF_NAME,MODE_PRIVATE);
int defaultCounter = 0;
int mCounter = settings.getInt(MainActivity.KEY_COUNTER,defaultCounter);
Toast.makeText(this, mCounter+"", Toast.LENGTH_SHORT).show();
}


简单好用。祝你的Android开发之路从入门到放弃,不谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android