android学习—数据存储和IO-SharedPreference和Editor

一、  sharedPreferences与Editor简介

1、    SharedPerferences保存的数据主要是类似配置信息格式的数据,因此它保存的数据主要是简单类型的key-value对,SharedPreferences本身并没有写入数据的能力,而是通过Sharedpreferences的内部接口来实现,SharedPreferences调用edit()方法即可获得他所对应的Editor对象,Editor提供了很多方法来对数据进行操作:

(1)、SharedPreferences.Editor clear():清空SharedPreferences里面的所有数据;

(2)SharedPreferences.Editor.putXX:向SharedPreferences里面存入指定的key对应的数值,其中XX是存入数据的基本类型;

(3)SharedPreferences.Editor.remove(String key):删除SharedPreferences里指定的key对应的数据的项;

(5)boolean commit()当Editor编辑完成后调用该方法提交修改。

2、SharedPreferences.本身是一个接口,程序无法直接创建SharedPreferences.实例,只能通过Context提供的get SharedPreferences.(String name ,int mode)方法来获取SharedPreferences.实例;其中的mode可以取得值有以下几个:

Context.Mode_Private:指定的SharedPreferences数据只能被本应由程序本身读写;

Context.Mode_WORLD_PRIVATE:指定该SharedPreferences数据能被其他应由程序读但是不能写;

Context.Mode_WORLD_WRITEABLE:指定该SharedPreferences数据能被其他应用程序读、写

二、  下面介绍一个实例来演示向SharedPreferences的读写

页面布局部分不再予以说明:可自定义;

下面来看一下程序的功能实现代码:

public class SharedPreferencesTestActivity extends Activity implements

      OnClickListener {

 

   Button saveBtn, readBtn;

   EditText nameEt, ageEt;

 

   public void onCreate(Bundle savedInstanceState) {

      super.onCreate(savedInstanceState);

      setContentView(R.layout.main);

 

      findViews();

   }

 

   private void findViews() {

      nameEt = (EditText) this.findViewById(R.id.nameEt);

      ageEt = (EditText) this.findViewById(R.id.ageEt);

      saveBtn = (Button) this.findViewById(R.id.saveBtn);

      readBtn = (Button) this.findViewById(R.id.readBtn);

 

      saveBtn.setOnClickListener(this);

      readBtn.setOnClickListener(this);

   }

 

   @Override

   public void onClick(View v) {

      String name = "无名氏";

      int age = -1;

      //获取的是其他应用也可读写的SharedPreferences对象

      SharedPreferences shared = this.getSharedPreferences("info",

           Context.MODE_WORLD_READABLE );

     

      switch (v.getId()) {

      //写入

      case R.id.saveBtn:

        name = nameEt.getText().toString().trim();

        age = Integer.valueOf(ageEt.getText().toString().trim());      

 

        Editor editor = shared.edit();

        editor.putString("name", name);

        editor.putInt("age", age);

 

        // 保证操作的事务完整性

        editor.commit();

 

        break;

      case R.id.readBtn:

        //读取

        name = shared.getString("name", "无名氏");

        age = shared.getInt("age", -1);

       

        Toast.makeText(this, "name="+name+ " age="+age, Toast.LENGTH_LONG).show();

       

        break;

      }

 

   }

}

具体运行的页面:

点击保存然后在点击读取之后:

 

 

三、  下面通过一个实例来介绍读、写其他应用的SharedPreferences;

首先要读写其他的应用的SharedPreferences应指定了访问权限,应当设置为允许其他程序可读写;

具体的步骤:

1、    需要创建其他应用的对应的Context:

Context otherContext = this.createPackageContext(

"cn.class3g.activity", Context.CONTEXT_IGNORE_SECURITY);

上面的 "cn.class3g.activity" 就是其他程序所在的包。

2、    调用其他程序的Context的getSharedPreferences(String name,int mode)即可获取对应的SharedPreferences对象;

3、    如果需要像其他程序写入数据,只需调用SharedPreferences的edit()方法获取相应的Editor就可以了!

下面是一段读取其他程序SharedPreferences的代码:

public class ReadOtherSharedPreferencesActivity extends Activity implements

      OnClickListener {

 

   Button readBtn;

 

   public void onCreate(Bundle savedInstanceState) {

      super.onCreate(savedInstanceState);

      setContentView(R.layout.main);

 

      findViews();

   }

 

   private void findViews() {

      readBtn = (Button) this.findViewById(R.id.readOther);

      readBtn.setOnClickListener(this);

   }

 

   public void onClick(View v) {

      if (v.getId() == R.id.readOther) {

        try {

           Context otherContext = this.createPackageContext(

                 "cn.class3g.activity", Context.CONTEXT_IGNORE_SECURITY);

 

           SharedPreferences shared = otherContext.getSharedPreferences(

                 "info", MODE_PRIVATE);

          

           String res = "name=" + shared.getString("name", "wms")+

                 " age="+ String.valueOf(shared.getInt("age", -1));

          

           Toast.makeText(this, res, Toast.LENGTH_LONG).show();

          

 

          

        } catch (NameNotFoundException e) {

           e.printStackTrace();

        }

      }

 

   }

}

 

运行效果:和在程序本身获取的效果是一样

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值