SharedPreferences

有时应用程序有少量的数据需要保存,而且这些数据的格式很简单,都是普通的值,比如应用程序的各种配置信息(如是否打开音效,是否使用振动效果等,小游戏的玩家积分等),对于这种数据,就可以采用SharedPreferences保存的数据.并且它主要是类似于配置信息格式的数据,因此它保存的数据主要是简单类型的key-value对。

1)SharePreferences接口负责读取应用程序的Preferences的数据,提供了一些方法:

boolean contains(String key):是否包含该key数据
Map<String,?>getAll():获取全部的key-value
对boolean getXxx(String key,xxx defValue):获取指定key对应的value.

注意:1)Xxx是各种基本数据类型,如int,long
2)当文件不存在,获取key不存在,getXxx代码不会报错。
2)SharePreferences接口本身没有提供写入数据的能力,而是通过SharedPreferences
的内部接口Editor.Editor提供了如下方法:
clear():清空所有数据
putXxx(String key,Xxx value):存入指定key对应的数据
remove(String key):删除指定key对应的数据项
commit():当Editor编辑完成后,调用该方法提交修改

3)SharePreferences本身是一个接口,无法直接创建该实例,只能通过Context获取SharePreferences实例对象:SharePreferences preference =
context.getSharePreferences(name,mode);
注意:第二个参数支持如下几个值
Context.MODE_PRIVATE:指定该SharedPrefereces数据只能被本应用程序读写
Context.MODE_WORLD_READABLE:指定该SharedPrefereces数据能被其他应用程序读,但不能写,过时了
Context.MODE_WORLD_WRITEABLE:指定该SharedPrefereces数据能被其他应用程序读写,过时了,不安全
4)获取SharePreferences.Editor实例对象:Editor edit = preference.edit()

5)存放文件的路径:/data/data/package name/shared_prefs/name.xml
注意保存文件数据的格式
6)读写其他应用程序的SharedPreferences的数据的步骤:
a)需要创建其他程序对应的Context对象
Context c=createPackageContext(“包名”,
Context.CONTEXT_IGNORE_SECURITY);
b)获取其他程序的SharedPreferences对象
c.getSharedPrefereces(String,Context.MODE_MULTI_PROCESS)
//Context.MODE_WORLD_READABLE+ Context.MODE_WORLD_WRITEABLE
c)使用其他程序的SharedPreferences对象读写数据
getXxx,edit(),putXxx()

package com.xspacing.sharedpreference;

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;


import com.xspacing.sharedpreference.R;

public class MainActivity extends Activity {

    private EditText mEtSave;
    private TextView mTvRead;

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

    private void initViews() {
        mEtSave = (EditText) findViewById(R.id.et_save);
        mTvRead = (TextView) findViewById(R.id.read_tv);
    }

    /**
     * 保存数据
     * 
     * @param v
     */
    public void save(View v) {
        String value = mEtSave.getText().toString();
        SharedPreferences sp = this.getSharedPreferences("config", Context.MODE_PRIVATE);
        Editor edit = sp.edit();
        edit.putString("key", value);
        edit.commit();

    }

    /**
     * 读取数据
     * 
     * @param v
     */
    public void read(View v) {
        SharedPreferences sp = this.getSharedPreferences("config", Context.MODE_PRIVATE);
        String value = sp.getString("key", "");
        mTvRead.setText(value);
    }

}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.xspacing.sharedpreference.MainActivity" >

    <EditText
        android:id="@+id/et_save"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="save"
        android:text="保存" />

    <TextView
        android:id="@+id/read_tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="read"
        android:text="读取" />

LinearLayout>

将SharedPreference写成一个工具类,方便在开发中使用

package com.xspacing.sharedpreference;

import java.util.Map;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;

/**
 * @ClassName SPUtils.java
 * @Description sharedpreference工具类
 * @author smile
 * @version v1.0
 * @date 2016年10月17日
 */
public class SPUtils {

    public static final String SP_NAME = "config";
    public static final int SP_MODE = Context.MODE_PRIVATE;

    /**
     * 保存数据
     * 
     * @param ctx
     * @param key
     * @param obj
     */
    public static void put(Context ctx, String key, Object obj) {
        SharedPreferences sp = ctx.getSharedPreferences(SP_NAME, SP_MODE);
        Editor edit = sp.edit();
        if (obj instanceof Boolean) {
            edit.putBoolean(key, (Boolean) obj);
        } else if (obj instanceof Float) {
            edit.putFloat(key, (Float) obj);
        } else if (obj instanceof Integer) {
            edit.putInt(key, (Integer) obj);
        } else if (obj instanceof Long) {
            edit.putLong(key, (Long) obj);
        } else if (obj instanceof String) {
            edit.putString(key, (String) obj);
        }
        edit.commit();
    }

    /**
     * 获取指定数据
     * 
     * @param ctx
     * @param key
     * @param defaultObj
     * @return
     */
    public static Object get(Context ctx, String key, Object defaultObj) {
        SharedPreferences sp = ctx.getSharedPreferences(SP_NAME, SP_MODE);
        if (defaultObj instanceof Boolean) {
            return sp.getBoolean(key, (Boolean) defaultObj);
        } else if (defaultObj instanceof Float) {
            return sp.getFloat(key, (Float) defaultObj);
        } else if (defaultObj instanceof Integer) {
            return sp.getInt(key, (Integer) defaultObj);
        } else if (defaultObj instanceof Long) {
            return sp.getLong(key, (Long) defaultObj);
        } else if (defaultObj instanceof String) {
            return sp.getString(key, (String) defaultObj);
        }
        return null;
    }

    /**
     * 删除指定的数据
     * 
     * @param ctx
     * @param key
     */
    public static void remove(Context ctx, String key) {
        SharedPreferences sp = ctx.getSharedPreferences(SP_NAME, SP_MODE);
        Editor edit = sp.edit();
        edit.remove(key).commit();
    }

    /**
     * 获取所有的键值对
     * 
     * @param ctx
     * @return
     */
    public static Map getAll(Context ctx) {
        SharedPreferences sp = ctx.getSharedPreferences(SP_NAME, SP_MODE);
        return sp.getAll();
    }

    /**
     * 清除所有的数据
     * 
     * @param ctx
     */
    public static void clear(Context ctx) {
        SharedPreferences sp = ctx.getSharedPreferences(SP_NAME, SP_MODE);
        Editor edit = sp.edit();
        edit.clear().commit();
    }

    /**
     * 检查key对应的数据是否存在
     * 
     * @param ctx
     * @param key
     * @return
     */
    public static boolean contains(Context ctx, String key) {
        SharedPreferences sp = ctx.getSharedPreferences(SP_NAME, SP_MODE);
        return sp.contains(key);
    }

}

你可能感兴趣的:(android)