程序是数据的输入、处理和输出的过程,不管是操作系统还是应用程序都是不可避免的要用到大量的数据。由于内存容量有限,且不能长期保存数据,因此一般把它们以文件的形式保存在磁盘等存储介质中。操作系统一般是以文件的形式来保存数据的,而应用程序一般以数据库来保存数据。
在手机这种特殊设备里,也经常会存取一些数据。例如,音频文件,视频文件、图片文件和通信录等数据。Andorid作为一种手机操作系统,提供了如下几种存取数据的方式:Preference(配置)、File(文件)、SQLite数据和网络,可以根据程序的实际需要选择合适的存取方式。
另外,在Android中各个应用程序组件之间是相互独立的,彼此的数据不能共享。为了实现数据的共享,Andorid提供了Content Provider组件来实现程序指间的数据共享。
Preference提供了一种轻量级的数据存取方法,应用场合主要是数据比较少的配置信息。它以“键-值”(是一个Map)对的方式将数据保存在一个XML配置文件中,例如,我们设置了一个手机的开机问候语,可以将其以Preference方式来进行配置。
Preference简介:
使用Preference方式来存取数据,用到了SharedPreferences接口和SharedPreferences的一个内部接口SharedPreferences.Editor,这两个接口在andorid.content包中。
调用Context.getSharedPreferences(String name,int mode)方法得到SharedPreferences接口。该方法的第一个参数是文件名称,第二个参数是操作模式。操作模式有三种:
MODE_PRIVATE(私有)
MODE_WORLD_READABLE(可读)
MODE_WORLD_WRITEABLE(可写)
SharedPreferences提供了获取数据的方法,如getString(String key,String defValue)、getInt(String key,int defValue)等。调用SharedPreferences的edit()方法返回SharedPreferences.Editor内部接口,该接口中提供了保存数据的方法,如putString(String key,String value)、pubInt(String key,int value)等,调用该接口的commit方法可以将数据进行保存。SharedPreferences和SharedPreferences.Editor的常用方法如下:
SharedPreferences的常用方法
方法名称 |
方法描述 |
edit() |
返回SharedPreferences的内部接口SharedPreferences.Editor |
contains(String key) |
判断是否包含该键值 |
getAll() |
返回所有配置信息Map |
getBoolean(String key,Boolean defValue) |
获得一个boolean值 |
getFloat(String key,float defValue) |
获得一个float值 |
getInt(String key,int defValue) |
获得一个int值 |
getLong(String key,long defValue) |
获得一个long值 |
getString(String key,String defValue) |
获得一个String值 |
SharedPreferences.Editor
方法名称 |
方法描述 |
clear() |
清楚所有值 |
commit() |
保存 |
getAll() |
返回所有配置信息Map |
putBoolean(String key,Boolean value) |
保存一个boolean值 |
putFloat(String key,float value) |
保存一个float值 |
putInt(String key,int value) |
保存一个int值 |
putLong(String key,long value) |
保存一个long值 |
putString(String key,String value) |
保存一个String值 |
remove(String key) |
删除该键对应的键 |
下面是个小例子:
说明:
我们经常会有这样的经历,当我们在编辑短信的时候,突然来了一个电话。我们停止发送短信,去打电话,那么,当我们打完电话回来,我们编辑了一半的短信内容应该还在才对,这里我们就用Preference来保存临时短信内容
创建一个Activity,在其中放置一个EditText保存短信内容,放置一个Button用于发送信息。在onCreate()中通过getSharedPreferences()方法获得SharedPreferences接口,调用接口的getString()方法,获得保存内容,将内容设置到EditText中。
在onStop()方法中保存内容,使用getSharedPreferences().edit()方法获得SharedPreferences.Editor接口,调用SharedPreferences.Editor的putString()方法保存短信内容,调用commit()方法提交内容。
package org.hualang.preference; import android.app.Activity; import android.content.SharedPreferences; import android.os.Bundle; import android.widget.Button; import android.widget.EditText; public class PreferenceTest extends Activity { /** Called when the activity is first created. */ private EditText edit; private Button btn; private static final String TEMP_SMS="temp_sms"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); edit=(EditText)findViewById(R.id.myedit); btn=(Button)findViewById(R.id.mybutton); SharedPreferences pre=getSharedPreferences(TEMP_SMS,MODE_WORLD_READABLE); String content=pre.getString("sms_content",""); edit.setText(content); } protected void onStop() { super.onStop(); SharedPreferences.Editor editor=getSharedPreferences(TEMP_SMS,MODE_WORLD_WRITEABLE).edit(); editor.putString("sms_content", edit.getText().toString()); editor.commit(); } }
运行结果:
当编辑了一些内容后,会出屏幕再返回,发现原来编辑了一半的内容还在那里,其实它是把要保存的内容做诶XML文件保存在/data/data/package/shsared_prefs/下面了,如下: