SharedPreferences
SharedPreferences:利用程序有时需要保存少许的数据,如各种配置信息(声音的开关,震动效果的开关等)的存储,这个时候启用数据库有点夸大,安卓提供了SharedPreferences进行保存。
SharedPreferences保存的数据主要是类似于key-value键值对。其提供的主要接口是负责读取利用程序的Preferences数据,经常使用方法有以下:
- boolean contains(String key):判断SharedPreferences是不是包括特定的key数据。
- abstract Map<String,?> getAll():获得SharedPreferences数据里全部的ket-value对。
- boolean getXxx(String key, xxx defValue):获得SharedPreferences数据里指定的key对应的value.如果key不存在,则返回默许值defValue.其中的xxx可以是boolean,float,int,long,String等各种基本类型的值。
SharedPreferences依托内部的接口,才能够写入数据,调用edit()方法便可获得所对应的Editor对象。Editor提供了下面几种方法来向SharedPreferences写入数据:
- SharedPreferences.Editor clear(): 清空SharedPreferences里所有数据。
- ShraedPreferences.Editor putXxx(String key, Xxx value): 向SharedPreferences存入指定了key的数据value,value的类型可以是boolean,float,int,long,String等。
- SharedPreferences.Editor remove(String key): 删除 Sharedpreferences里指定key对应的数据。
- boolean commit(): 当Editor编辑完成后,调用该方法提交修改。
ShraedPreferences本身是1个接口,程序没法直接创建SharedPreferences实例,只能通过Context提供的getShraedPreferences(String name, int mode)方法来获得SharedPreferences实例。关于第2个参数mode有1下3种值:
- Context.MODE_PRIVATE: 指定该SharedPreferences数据只能被本利用读写。
- Context.MODE_WORLD_READABLE: 指定该SharedPreferences数据能被其他利用程序读,但是不能写入。
- Context.MODE_WORLD_WRITABLE: ShraedPreferences数据能被其他利用读写。
下面用1个小例子来演示下如何进行读写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,首先要被访问的利用在创建的时候指定了相应的访问权限,也就是上面提到的3种权限。
为了读取到其他利用程序的SharedPreferences数据,可以依照下面3个步骤来进行:
先创建其他利用对应的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中写入数据了。
现在在刚才已有的基础上,再创建1个利用程序,读取上1个利用的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();
}
});
}
}