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
对象实现。
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(); } }