在实际的软件运行中,往往需要一些配置信息,在Android中想要实现配置信息的保存操作则非SharedPreferences莫属。SharedPreferences提供一些基础的数据存储功能,其信息的存储按照“Key=value”的形式进行保存,但数据只能是一些基本的数据类型。使用XML文件存放数据,存放位置在/data/data//shared_prefs目录下
SharedPreferences有如下常用的方法:
方法 | 返回值 | 描述 |
---|---|---|
edit() | SharedPreferences.Editor | 获取Editor编辑对象 |
contains(String key) | boolean | 判断key是否存在 |
getAll() | Map | 取出全部数据 |
getBoolean(String key,booean defValue) | boolean | 取出boolean数据,并制定默认值 |
getInt(String key,int defValue) | int | 取出int数据,并制定默认值 |
getFloat(String key,float defValue) | float | 取出float数据,并制定默认值 |
getLong(String key,long defValue) | long | 取出long数据,并制定默认值 |
getString(String key,String defValue) | String | 取出String数据,并制定默认值 |
.
在此我们只是得到了读取的操作,而要对其中的数据做写入的操作则需要先通过SharedPreferences类所提供的edit()方法获取SharedPreferences.Editor对象,然后通过此对象调用相应的写入方法。以下是其常用的方法:
方法 | 描述 |
---|---|
clear() | 清除所有数据 |
commit() | 提交所更新的数据 |
putBoolean(String key,boolean value) | 保存boolean数据 |
putInt(String key,int value) | 保存bint数据 |
putFloat(String key,float value) | 保存float数据 |
putLong(String key,long value) | 保存long数据 |
putString(String key,String value) | 保存String数据 |
remove(String key) | 删除指定key的数据 |
.
对于SharedPreferences实例的创建可通过getSharedPreferences(String filename,int mode)来取得SharedPreferences实例,其中filename为指定所要保存的文件名称,mode为指定其操作模式,mode有三种:
MODE_PRIVATE:指定该文件只能被一个应用程序调用
MODE_WORLD_READABLE:允许其他应用读取该文件
MODE_WORLD_WRITEABLE:允许其他应用修改该文件
如果文件为可读写时,其他应用要调用则需要获取到此应用的Context,然后会在应用所在包下的shared_prefs目录下找该SharedPreferences文件。
Context context = createPackageContext("packagename",Context.CONTEXT_IGNORE_SECURITY);
SharedPreferences sharedPreferences = context.getSharedPreferences("filename", Context.MODE_WORLD_READABLE);
其中packagename为设置mode为MODE_WORLD_READABLE或MODE_WORLD_WRITEABLE文件所在的应用的包名,filename为该文件的filenam,mode对应该文件的mode。
当然,既然SharedPreferences是以xml文件的形式存储于/data/data//shared_prefs目录下,则在其mode设为可读写的情况下还可以通过文件读取的方法获取其xml文件
File sharedPreferencesXML = new File("/data/data/<package name>/shared_prefs/<filenam>.xml");
以下是一个简单的添加和获取代码
PreferencesUtil
public class PreferencesUtil {
private static PreferencesUtil preferencesUtil = null;
private SharedPreferences preferences = null;
private SharedPreferences.Editor editor = null;
private static String NAME = "name";
private static String AGE = "age";
public static PreferencesUtil getPreferences(){
if (preferencesUtil == null){
preferencesUtil = new PreferencesUtil();
}
return preferencesUtil;
}
public void init(Context context){
if (preferences == null){
preferences = context.getSharedPreferences("preferences",context.MODE_PRIVATE);
}
if (editor == null){
editor = preferences.edit();
}
}
public void setName(String name){
editor.putString(NAME,name);
editor.commit();
}
public void setAge(int age){
editor.putInt(AGE,age);
editor.commit();
}
public String getName(){
return preferences.getString(NAME,"未设置名字");
}
public int getAge(){
return preferences.getInt(AGE,0);
}
}
界面布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="com.doublec.administrator.mysharedpreferences.MainActivity">
<EditText
android:id="@+id/edt_name"
android:layout_width="match_parent"
android:layout_height="50dp"
android:hint="名字"/>
<EditText
android:id="@+id/edt_age"
android:layout_width="match_parent"
android:layout_height="50dp"
android:inputType="number"
android:hint="年龄"/>
<Button
android:id="@+id/commit"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="提交"/>
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="Hello World!" />
</LinearLayout>
MainActivity
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private TextView textView;
private EditText editName,editAge;
private Button btnCommit;
private PreferencesUtil preferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
preferences = PreferencesUtil.getPreferences();
preferences.init(this);
textView = (TextView) findViewById(R.id.text);
editName = (EditText) findViewById(R.id.edt_name);
editAge = (EditText) findViewById(R.id.edt_age);
btnCommit = (Button) findViewById(R.id.commit);
btnCommit.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.commit:
if (!editName.getText().toString().isEmpty() && !editAge.getText().toString().isEmpty()) {
preferences.setName(editName.getText().toString());
preferences.setAge(Integer.parseInt(editAge.getText().toString()));
}
textView.setText("姓名:" + preferences.getName() + "\n年龄:" + preferences.getAge());
break;
default:
break;
}
}
}