SharedPreferences

来源:互联网 发布:金牛软件破解版 编辑:程序博客网 时间:2024/06/05 06:25

SharedPreferences

  SharedPreferences:应用程序有时需要保存少量的数据,如各种配置信息(声音的开关,震动效果的开关等)的存储,这个时候启用数据库有点夸张,安卓提供了SharedPreferences进行保存。


  SharedPreferences保存的数据主要是类似于key-value键值对。其提供的主要接口是负责读取应用程序的Preferences数据,常用方法有以下:
  1. boolean contains(String key):判断SharedPreferences是否包含特定的key数据。
  2. abstract Map<String,?> getAll():获取SharedPreferences数据里全部的ket-value对。
  3. boolean getXxx(String key, xxx defValue):获取SharedPreferences数据里指定的key对应的value.如果key不存在,则返回默认值defValue.其中的xxx可以是boolean,float,int,long,String等各种基本类型的值。

  SharedPreferences依靠内部的接口,才能够写入数据,调用edit()方法即可获取所对应的Editor对象。Editor提供了下面几种方法来向SharedPreferences写入数据:

  1. SharedPreferences.Editor clear(): 清空SharedPreferences里所有数据。
  2. ShraedPreferences.Editor putXxx(String key, Xxx value): 向SharedPreferences存入指定了key的数据value,value的类型可以是boolean,float,int,long,String等。
  3. SharedPreferences.Editor remove(String key): 删除 Sharedpreferences里指定key对应的数据。
  4. boolean commit(): 当Editor编辑完成后,调用该方法提交修改。


  ShraedPreferences本身是一个接口,程序无法直接创建SharedPreferences实例,只能通过Context提供的getShraedPreferences(String name, int mode)方法来获取SharedPreferences实例。关于第二个参数mode有一下三种值:
  1. Context.MODE_PRIVATE: 指定该SharedPreferences数据只能被本应用读写。
  2. Context.MODE_WORLD_READABLE: 指定该SharedPreferences数据能被其他应用程序读,但是不能写入。
  3. Context.MODE_WORLD_WRITABLE: ShraedPreferences数据能被其他应用读写。

下面用一个小例子来演示下如何进行读写SharedPreferences数据:
public class MainActivity extends Activity {    private Button write;    private Button read;    private SharedPreferences preferences;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        write = (Button) findViewById(R.id.write);        read = (Button) findViewById(R.id.read);        preferences = getSharedPreferences("count",MODE_PRIVATE);        //读取SharedsPreferences里的count数据        int count = preferences.getInt("count",0);        Toast.makeText(this,"程序以前被使用了" + count + "次。 ", Toast.LENGTH_LONG).show();        //获取到SharedPreferences的editor,用来进行写入数据        SharedPreferences.Editor editor = preferences.edit();        //存入数据        editor.putInt("count",++count);        //提交修改        editor.commit();    }}


  上面这个例子只是在本应用里面使用ShraedPreferences,如果要读写其他应用的ShraedPreferences,首先要被访问的应用在创建的时候指定了相应的访问权限,也就是上面提到的三种权限。


  为了读取到其他应用程序的SharedPreferences数据,可以按照下面三个步骤来进行:


  先创建其他应用对应的Context,例如:
Context context = createPackageContext("com.dada.example",Context.CONTEXT_IGNORE_SECURITY);

  上面的com.dada.example就是应用程序的包名,通过这个我们可以找到相应的应用程序。


  调用获取到的COntext的getShraedPreferences(String name, int mode)即可获取到相应的ShraedPreferences对象。


  再根据SharedPreferences提供的edit()方法来获取到响应的Editor,即可向ShraedPreferences中写入数据了。
现在在刚才已有的基础上,再创建一个应用程序,读取上一个应用的ShraedPreferneces中的数据。
public class MainActivity extends ActionBarActivity {    private Button write;    private Button read;    private int count;    private SharedPreferences preferences;    private SharedPreferences.Editor editor;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        write = (Button) findViewById(R.id.write);        read = (Button) findViewById(R.id.read);        Context myApplication = null;        try{            myApplication = createPackageContext("com.example.pc.myapplication",Context.CONTEXT_IGNORE_SECURITY);            preferences = myApplication.getSharedPreferences("count",Context.MODE_WORLD_WRITEABLE);            editor = preferences.edit();        }        catch (Exception e){            e.printStackTrace();        }                write.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                editor.putInt("count",++count);            }        });        read.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                count = preferences.getInt("count",0);                Toast.makeText(getApplicationContext(),"count的值为" + count,Toast.LENGTH_LONG).show();            }        });    }}


0 0
原创粉丝点击