Android 数据存储之_SharedPreferences

来源:互联网 发布:2016网络流行伤感情歌 编辑:程序博客网 时间:2024/04/28 17:04

      SharedPreferences是 Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,一些默认欢迎语  登录的用户名和密码等。一般在Activity中 重载窗口状态onSaveInstanceState保存一般使用SharedPreferences完成,它提供了Android平台常规的Long长 整形、Int整形、String字符串型的保存。对于常规的轻量级而言比SQLite要好不少,如果真的存储量不大可以考虑自己定义文件格式。xml 处理时Dalvik会通过自带底层的本地XML Parser解析,比如XMLpull方式,这样对于内存资源占用比较好。

通过SharedPreferences可以将NVP(Name-value pair 名称-值对【又称键值对】)保存在android的文件系统中,而且通过SharedPreferences对文件系统的操作过程完全是屏蔽的。这样仅需要通过调用SharedPreferences 对键值对很方便的进行保存和读取。


在Android系统中,这些信息以XML文件的形式保存在 /data/data/PACKAGE_NAME /shared_prefs 目录下。



SharedPreferences的使用非常简单,能够轻松的存放数据和读取数据。 SharedPreferences只能保存简单类型的数据,例如,String、int等。一般会将复杂类型的数据转换成Base64编码,然后将转换 后的数据以字符串的形式保存在 XML文件中,再用SharedPreferences保存。
 
    使用SharedPreferences保存key-value对的步骤如下:
(1)使用Activity类的getSharedPreferences方法获得SharedPreferences对象,其中存储key-value的文件的名称由getSharedPreferences方法的第一个参数指定。
[java]view plaincopy

                    SharedPreferences loinPasswd = getSharedPreferences(NAPASS,                MODE_PRIVATE);

 // Context.MODE_PRIVATE 访问模式
SharedPreferences 支持三中访问模式
MODE_PRIVATE
MODE_WORLD_READABLE
MODE_WORLD_WRITEABLE


// file:SharedPreferences的名称。这个名称和anroid文件系统中保存的文件名同名。


(2)使用SharedPreferences接口的edit获得SharedPreferences.Editor对象。
eg:
                    SharedPreferences.Editor loinpasswdedit = loinPasswd.edit();



(3)通过SharedPreferences.Editor接口的putXxx方法保存key-value对。其中Xxx表示不同的数据类型。例如:字符串类型的value需要用putString方法。
(4)通过SharedPreferences.Editor接口的commit方法保存key-value对。commit方法相当于数据库事务中的提交(commit)操作。
 
                    loinpasswdedit.putString(NAME, etName.getText().toString());
                    loinpasswdedit.putString(PASSWD, "");

                    loinpasswdedit.commit();


具体代码的书写流程为:
 
A、存放数据信息

                    // 第一步 获得SharedPreferences对象 如果存在则打开,如果不存在则创建。loinPasswd.xml
                    SharedPreferences loinPasswd = getSharedPreferences(NAPASS,
                            MODE_PRIVATE);
                    // 第二步 是对象可编辑,通过对象SharedPreferences.Editor
                    SharedPreferences.Editor loinpasswdedit = loinPasswd.edit();
                    // 第三步 SharedPreferences是通过键值对的形式存储数据的,把值put到对应的键上。
                    loinpasswdedit.putString(NAME, etName.getText().toString());
                    loinpasswdedit.putString(PASSWD, etPassWd.getText()
                            .toString());
                    // 修改好 一定要提交
                    loinpasswdedit.commit();


B、读取数据信息

        // 第一步 获得SharedPreferences对象 打开loinPasswd.xml文件
        SharedPreferences loinpasswd = getSharedPreferences(NAPASS, 0);
        // 第二步 根据键值对 把对应的值取出来
        String name = loinpasswd.getString(NAME, "").toString();
        String passwd = loinpasswd.getString(PASSWD, "").toString();


对应的数据保存在:
File Explorer /<package name>/shared_prefs/loinPasswd.xml
 
主要代码 具体如下(仅供参考):

public class MainActivity extends ActionBarActivity {

    protected static final String NAPASS = "loinPasswd";
    protected static final String NAME = "name";
    protected static final String PASSWD = "passwd";
    protected static final String TAG = "com.example.sharepreferences.MainActivity";
    private static EditText etName;
    private static EditText etPassWd;
    private static CheckBox checkBox;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        etName = (EditText) findViewById(R.id.et_name);
        etPassWd = (EditText) findViewById(R.id.et_passwd);

        Button button = (Button) findViewById(R.id.bt_login);
        checkBox = (CheckBox) findViewById(R.id.cb_rem);
        // 得到name passwd
        getlogininfo();

        button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                if (checkBox.isChecked()) {
                    // 保存数据到SharedPreferences
                    Log.i(TAG, "checkBox isClickable ");
                    // 第一步 获得SharedPreferences对象 如果存在则打开,如果不存在则创建。loinPasswd.xml
                    SharedPreferences loinPasswd = getSharedPreferences(NAPASS,
                            MODE_PRIVATE);
                    // 第二步 是对象可编辑,通过对象SharedPreferences.Editor
                    SharedPreferences.Editor loinpasswdedit = loinPasswd.edit();
                    // 第三步 SharedPreferences是通过键值对的形式存储数据的,把值put到对应的键上。
                    loinpasswdedit.putString(NAME, etName.getText().toString());
                    loinpasswdedit.putString(PASSWD, etPassWd.getText()
                            .toString());
                    // 修改好 一定要提交
                    loinpasswdedit.commit();
                } else {
                    Log.i(TAG, "checkBox is not Clickable ");
                    SharedPreferences loinPasswd = getSharedPreferences(NAPASS,
                            MODE_PRIVATE);
                    SharedPreferences.Editor loinpasswdedit = loinPasswd.edit();
                    loinpasswdedit.putString(NAME, etName.getText().toString());
                    loinpasswdedit.putString(PASSWD, "");

                    loinpasswdedit.commit();
                }
            }
        });

    }

    private void getlogininfo() {
        // 得到数据从SharedPreferences
        // 第一步 获得SharedPreferences对象 打开loinPasswd.xml文件
        SharedPreferences loinpasswd = getSharedPreferences(NAPASS, 0);
        // 第二步 根据键值对 把对应的值取出来
        String name = loinpasswd.getString(NAME, "").toString();
        String passwd = loinpasswd.getString(PASSWD, "").toString();
        etName.setText(name);
        etPassWd.setText(passwd);

    }
}



另外SharedPreferences 不仅能够保存数据,还可以实现不同应用程序间的数据共享。

如果将SharedPreferences的访问模式设置为全局读或者全局写。其他应用程序就可以读或写本应用的SharedPreferences数据。
访问者要知道共享者的包名称和SharedPreferences名称。通过context获得SharedPreferences对象。

3 0
原创粉丝点击