浅谈Android数据存储与IO之一(Sharepreferences)

来源:互联网 发布:ubuntu windows 时间 编辑:程序博客网 时间:2024/05/21 11:31

     浅谈Android数据存储与IO之一(Sharepreferences)

    所有应用程序都必然涉及数据的输入、输出,对于不同的需求,Android提供了两种不同的方式,一种是普通的文件,一种是SQLite数据库。

 

     有的时候,应用程序仅有少量的数据需要保存,而且这些数据的格式很简单,都是普通的字符串,标量类型的值的时候,对于这种数据,Android提供了SharePreference进行保存,SharePreferences保存的信息主要是类似与配置信息格式的数据,保存形式类似于Map中的简单键值key-value对。

     SharePreferences接口具有一个特点,那就是它将readwrite进行了分离。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;@Overrideprotected 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() {@Overridepublic void onClick(View arg0) {str1=key.getText().toString();str2=value.getText().toString();write(str1,str2);}});}@Overridepublic 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对象首先要得到该应用程序的ContextContext代表了访问应用程序的全局信息的接口,而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">

0 0