SharedPreferences(相关信息)是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,一般在Activity中 重载窗口状态onSaveInstanceState保存一般使用SharedPreferences完成,它提供了Android平台常规的Long长 整形、Int整形、String字符串型的保存。
它是什么样的处理方式呢? SharedPreferences类似过去Windows系统上的ini配置文件,但是它分为多种权限,可以全局共享访问,android123提示最终是以xml方式来保存,整体效率来看不是特别的高,对于常规的轻量级而言比SQLite要好不少,如果真的存储量不大可以考虑自己定义文件格式。xml 处理时Dalvik会通过自带底层的本地XML Parser解析,比如XMLpull方式,这样对于内存资源占用比较好。
它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。
其存储位置在/data/data/<包名>/shared_prefs目录下。
SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor
对象实现。
![](https://img-my.csdn.net/uploads/201212/27/1356592483_8558.png)
![](https://img-my.csdn.net/uploads/201212/27/1356592483_8558.png)
![](https://img-my.csdn.net/uploads/201212/27/1356592503_6858.png)
![](https://img-my.csdn.net/uploads/201212/27/1356592512_5732.png)
![](https://img-my.csdn.net/uploads/201212/27/1356592519_1112.png)
Main.XML布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<RelativeLayout android:layout_width="fill_parent"
android:layout_height="wrap_content" android:orientation="horizontal">
<TextView android:text="键" android:id="@+id/keyview"
android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
<EditText android:id="@+id/key" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_toRightOf="@+id/keyview"></EditText>
</RelativeLayout>
<RelativeLayout android:layout_width="fill_parent"
android:layout_height="wrap_content" android:orientation="horizontal">
<TextView android:text="值" android:id="@+id/valueview"
android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
<EditText android:id="@+id/value" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_toRightOf="@+id/valueview"
android:password="true"></EditText>
</RelativeLayout>
<LinearLayout android:layout_width="fill_parent"
android:layout_height="wrap_content" android:orientation="horizontal">
<Button android:text="插入" android:id="@+id/insert"
android:layout_width="wrap_content" android:layout_height="wrap_content" />
<Button android:text="删除" android:id="@+id/delete"
android:layout_width="wrap_content" android:layout_height="wrap_content" />
<Button android:text="修改" android:id="@+id/modify"
android:layout_width="wrap_content" android:layout_height="wrap_content" />
<Button android:text="查询" android:id="@+id/query"
android:layout_width="wrap_content" android:layout_height="wrap_content" />
<Button android:text="清空" android:id="@+id/clear"
android:layout_width="wrap_content" android:layout_height="wrap_content" />
</LinearLayout>
<TextView android:id="@+id/content" android:layout_width="fill_parent" android:layout_height="fill_parent"/>
</LinearLayout>
MainActivity.java
MainActivity.java
public class MainActivity extends Activity {
private EditText keyET;
private EditText valueET;
private Button insertBtn;
private Button deleteBtn;
private Button modifyBtn;
private Button queryBtn;
private Button clearBtn;
private TextView textView;
/** 存储的文件名 */
public static final String DATABASE = "Database";
/** 存储后的文件路径:/data/data/<package name>/shares_prefs + 文件名.xml */
public static final String PATH = "/data/data/code.sharedpreferences/shared_prefs/Database.xml";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
keyET = (EditText) findViewById(R.id.key);
valueET = (EditText) findViewById(R.id.value);
insertBtn = (Button) findViewById(R.id.insert);
deleteBtn = (Button) findViewById(R.id.delete);
modifyBtn = (Button) findViewById(R.id.modify);
queryBtn = (Button) findViewById(R.id.query);
clearBtn = (Button) findViewById(R.id.clear);
// 用于显示存储文件中数据
textView = (TextView) findViewById(R.id.content);
insertBtn.setOnClickListener(new OperateOnClickListener());
deleteBtn.setOnClickListener(new OperateOnClickListener());
modifyBtn.setOnClickListener(new OperateOnClickListener());
queryBtn.setOnClickListener(new OperateOnClickListener());
clearBtn.setOnClickListener(new OperateOnClickListener());
}
class OperateOnClickListener implements OnClickListener {
@Override
public void onClick(View v) {
// 获取SharedPreferences对象
// 返回的数据getSharedPreferences(字符串,整数)。
// 几种getSharedPreferences权限
// MODE_PRIVATE 值为0 默认模式,创建的文件只能通过调用应用程序(或所有应用程序共享相同的用户ID)。
// MODE_WORLD_READABLE 1 文件创建模式:允许所有其他应用程序已经创建的文件的读权限。
// MODE_WORLD_WRITEABLE 值为2 文件创建模式:允许所有其他应用程序有写权限创建的文件。
SharedPreferences sp = getSharedPreferences(DATABASE,Context.MODE_PRIVATE);
//SharedPreferences sp = getSharedPreferences(DATABASE,Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE);
// 获取Editor对象
Editor editor = sp.edit();
// 获取界面中的信息
String key = keyET.getText().toString();
String value = valueET.getText().toString();
switch (v.getId()) {
// 插入数据
case R.id.insert:
editor.putString(key, value);
editor.commit();
textView.setText(MainActivity.this.print());
break;
// 删除数据
case R.id.delete:
editor.remove(key);
editor.commit();
textView.setText(MainActivity.this.print());
break;
// 修改数据
case R.id.modify:
editor.putString(key, value);
editor.commit();
textView.setText(MainActivity.this.print());
break;
// 查询数据
case R.id.query:
String result = sp.getString(key, "");
textView.setText("key=" + key + ",value=" + result);
break;
// 清空所有数据
case R.id.clear:
editor.clear();
editor.commit();
textView.setText(MainActivity.this.print());
break;
}
}
}
/** 获取存储文件的数据 */
private String print() {
//用一个StringBuffer来接收
StringBuffer buff = new StringBuffer();
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
new FileInputStream(PATH)));
String str;
while ((str = reader.readLine()) != null) {
buff.append(str + "\n");
}
} catch (Exception e) {
e.printStackTrace();
}
return buff.toString();
}
}