Android SharedPreferences实现数据存储功能
除了sqlite数据库外,sharedpreferences也是一种轻型的数据存储方式,不同于文件的存储方式,sharedpreferences是使用键值对(key-value)数据的方式来存储数据的。而且sharedpreferences还支持多种不同的数据类型存储,因此,使用sharedpreferences来进行数据持久化要比使用文件方便很多,下面我们就来看一下它的具体用法吧。
如何将数据存储到sharedpreferences中
要想使用sharedpreferences来存储数据,首先需要获取到sharedpreferences对象。android中主要提供了三种方法用于得到sharedpreferences对象。
1.context类中的getsharedpreferences()方法
此方法接收两个参数,第一个参数用于指定sharedpreferences文件的名称,如果指定的文件不存在则会创建一个,sharedpreferences文件都是存放在/data/data//shared_prefs/目录下的。
第二个参数用于指定操作模式,主要有两种模式可以选择,mode_private和mode_multi_process。mode_private仍然是默认的操作模式,和直接传入0效果是相同的,表示只有当前的应用程序才可以对这个sharedpreferences文件进行读写。mode_multi_process则一般是用于会有多个进程中对同一个sharedpreferences文件进行读写的情况。类似地,mode_world_readable和mode_world_writeable这两种模式已在android 4.2版本中被废弃。
2.activity类中的getpreferences()方法
这个方法和context中的getsharedpreferences()方法很相似,不过它只接收一个操作模式参数,因为使用这个方法时会自动将当前活动的类名作为sharedpreferences的文件名。
3.preferencemanager类中的getdefaultsharedpreferences()方法
这是一个静态方法,它接收一个context参数,并自动使用当前应用程序的包名作为前缀来命名sharedpreferences文件。
得到了sharedpreferences对象之后,就可以开始向sharedpreferences文件中存储数据了,主要可以分为三步实现。
1.调用sharedpreferences对象的edit()方法来获取一个sharedpreferences.editor对象。
2.向sharedpreferences.editor对象中添加数据,比如添加一个布尔型数据就使用putboolean方法,添加一个字符串则使用putstring()方法,以此类推。
3.调用commit()方法将添加的数据提交,从而完成数据存储操作。
不知不觉中已经将理论知识介绍得挺多了,那我们就赶快通过一个例子来体验一下sharedpreferences存储的用法吧。
新建一个sharedpreferencestest项目,然后修改activity_main.xml中的代码,如下所示:
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <button android:id="@+id/save_data" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="save data" /> </linearlayout>
这里我们只是简单地放置了一个按钮,用于将一些数据存储到sharedpreferences文件当中。
然后修改mainactivity中的代码,如下所示:
public class mainactivity extends activity { private button savedata; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); savedata = (button) findviewbyid(r.id.save_data); savedata.setonclicklistener(new onclicklistener() { @override public void onclick(view v) { sharedpreferences.editor editor = getsharedpreferences("data", mode_private).edit(); editor.putstring("name", "lily"); editor.putint("age", 26); editor.putboolean("married", false); editor.commit(); } }); } }
可以看到,这里首先给按钮注册了一个点击事件,然后在点击事件中通过getsharedpreferences()方法指定sharedpreferences的文件名为data,并得到了sharedpreferences.editor对象。接着向这个对象中添加了三条不同类型的数据,最后调用commit()方法进行提交,从而完成了数据存储的操作。
那么接下来我们自然要看一看,如何从sharedpreferences文件中去读取这些数据了。
从sharedpreferences中读取数据
sharedpreferences对象中提供了一系列的get方法用于对存储的数据进行读取,每种get方法都对应了sharedpreferences. editor中的一种put方法,比如读取一个布尔型数据就使用getboolean()方法,读取一个字符串就使用getstring()方法。这些get方法都接收两个参数,第一个参数是键,传入存储数据时使用的键就可以得到相应的值了,第二个参数是默认值,即表示当传入的键找不到对应的值时,会以什么样的默认值进行返回。
我们还是通过例子来实际体验一下吧,仍然是在sharedpreferencestest项目的基础上继续开发,修改activity_main.xml中的代码,如下所示:
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <button android:id="@+id/save_data" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="save data" /> <button android:id="@+id/restore_data" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="restore data" /> </linearlayout>
这里增加了一个还原数据的按钮,我们希望通过点击这个按钮来从sharedpreferences文件中读取数据。
修改mainactivity中的代码,如下所示:
public class mainactivity extends activity { private button savedata; private button restoredata; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); savedata = (button) findviewbyid(r.id.save_data); restoredata = (button) findviewbyid(r.id.restore_data); …… restoredata.setonclicklistener(new onclicklistener() { @override public void onclick(view v) { sharedpreferences pref = getsharedpreferences("data", mode_private); string name = pref.getstring("name", ""); int age = pref.getint("age", 0); boolean married = pref.getboolean("married", false); log.d("mainactivity", "name is " + name); log.d("mainactivity", "age is " + age); log.d("mainactivity", "married is " + married); } }); } }
可以看到,我们在还原数据按钮的点击事件中首先通过getsharedpreferences()方法得到了sharedpreferences对象,然后分别调用它的getstring()、getint()和getboolean()方法去获取前面所存储的姓名、年龄和是否已婚,如果没有找到相应的值就会使用方法中传入的默认值来代替,最后通过log将这些值打印出来。
通过这个简单的例子,我们就了解了如何利用sharedpreferences实现数据存储。相比之下,sharedpreferences存储确实要比文本存储简单方便了许多,应用场景也多了不少,比如很多应用程序中的偏好设置功能其实都使用到了sharedpreferences技术。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。