浅谈Android数据存储与IO之一(Sharepreferences)
所有应用程序都必然涉及数据的输入、输出,对于不同的需求,Android提供了两种不同的方式,一种是普通的文件,一种是SQLite数据库。
有的时候,应用程序仅有少量的数据需要保存,而且这些数据的格式很简单,都是普通的字符串,标量类型的值的时候,对于这种数据,Android提供了SharePreference进行保存,SharePreferences保存的信息主要是类似与配置信息格式的数据,保存形式类似于Map中的简单键值key-value对。
SharePreferences接口具有一个特点,那就是它将read与write进行了分离。Sharepreferences接口主要负责读取应用程序的Preferences数据。
boolean conntains(String key):判断SharePreferences是否包含特定key的数据
getXxx(String key,xxx defValue):获取Preferences数据里指定key对应的value,如果该key不存在,返回默认值defValue。其中xxx可为各种基本数据类型。
而SharePreferences调用edit()方法即可获取其对应的Editor()方法。Editor负责写入Preferences数据。
clear():清空SharePreferences内所有数据
putXxx(String key,xxx value):向Preferences中存入指定key对应的数据,其中xxx为基本数据类型。
remove(String key):删除Preferences中指定key对应的数据
boolean commit():当Editor编辑完成后,调用该方法提交修改
值得一提的是,SharePreferences本身是一个接口,而程序无法直接创建SharePreferences实例,只能通过Context提供的getSharePreferences(String name,int mode)方法来获取SharePreferences实例。第一个参数name为你要写入或者要生成的文件名,不需要带文件格式,也不需要加入生成文件的绝对路径,函数将自动生成文件格式以及路径。SharePreferences数据总是保存在“/data/data/<package name>/shared_prefs”目录下,以XML文档格式保存。第二个参数设定了XML文档的读取权限,它支持如下几个值:
Context.MODE_PRIVATE:指定该文档只能被本应用程序读、写
Context.MODE_WORLD_READBLE:该文档可被其他应用程序读,但不可被写
Context.MODE_WORLD_WRITABLE:该文档可被其他应用程序读写
下面给出一个读写SharePreferences的实例,该实例是在两个输入框中分别输入key和value值,点击write按钮后将键值对写入XML文档中,再从文档中取出value值显示在TextView区域。
<span style="font-size:18px;">public class MainActivity extends Activity {
private EditText key;
private EditText value;
private TextView test;
String str1,str2;
SharedPreferences share;
Editor editor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
key = (EditText)findViewById(R.id.edt1);
value = (EditText)findViewById(R.id.edt2);
test = (TextView)findViewById(R.id.test06);
Button but=(Button)findViewById(R.id.commit);
share=getSharedPreferences("test06",Context.MODE_WORLD_WRITEABLE);//获得Preferences实例
editor=share.edit();//获得编辑器
but.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
str1=key.getText().toString();
str2=value.getText().toString();
write(str1,str2);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void write(String key,String value){
editor.putString(str1, str2);//向实例中写入key-value键值对
editor.commit();//提交数据
String str3=share.getString(str1, "阿西吧");//从实例中将键值对取出,若不存在则返回阿西吧
test.setText(str3);//显示在屏幕上
}
}</span>
一定要注意的是,在Editor put或者 remove数据后一定要commit()否则数据将不会被提交,XML文档也不会被修改
在某些情况下,我们需要读取其他应用的SharePreferences,前提是该XML文档创建时给予了相应的读取权限。读取过程可按照如下步骤进行:
1.获得一个SharePreferences对象首先要得到该应用程序的Context,Context代表了访问应用程序的全局信息的接口,而Android系统就是根据应用程序的包名来作为程序的标识的,因此我们可以根据应用程序的包名来取得相应的Context。
Context context=creatPacketContext(“包名”,Context.CONTEXT_IGNORE_SECURITY);
2.调用其他应用程序的Context来获得相应程序的getSharePreferences(String name,int mode)方法来获取SharePreferences实例。
获得了SharePreferences实例后我们就可以轻松愉快的查看与修改其他应用程序的XML文件了哈哈哈哈(由此可见我们编写程序时最好还是把访问权限设置为 Context.MODE_PRIVATE这样别人就无法通过这样的方式来访问你的XML文档了虽然依然可以通过XML解析来完成。。。。。人生艰难,这里我就不写如何进行XML解析了哈哈哈哈)</pre> <span style="font-family:宋体;"></span><pre name="code" class="java">