美文网首页
Android持久化存储之SharedPreferences

Android持久化存储之SharedPreferences

作者: GODANDDEVIL | 来源:发表于2020-02-28 17:38 被阅读0次

SharedPreferences是一种轻量型的存储方式,他适合用于存储一些简单的参数配置。比如说在游戏中是否打开声音、上一次登录的账号等,这些都可以用SharedPreferences来实现。其实SharedPreferences的原理是使用xml文件来存放数据。比如说我们在res/values下新建一个setting.xml文件。文件内容如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="number"></string>
    <string name="music"></string>
</resources>

具体使用步骤:

public class LoginActivity extends AppCompatActivity
{
    //声明SharedPreferences,用来读取xml
    SharedPreferences spf;
    //声明SharedPreferences.Editor,用来修改xml里面的值
    SharedPreferences.Editor edit;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        //与相应的xml文件建立连接
        spf = getSharedPreferences("setting",MODE_PRIVATE);
        //直接使用getxxxx方法来获取xml中指定key的值,第二个参数是当不存在这个数据时,会返回的值
        String musicValue = spf.getString("music","");
        //得到指定xml的SharedPreferences.Editor
        edit = spf.edit();
        //修改指定xml的值
        ed.putString("music","xxx");
        //记住,这里一定要commit才能生效。
        ed.commit();

    }
}

在打开指定xml时,调用了getSharedPreferences(“setting”,MODE_WORLD_READABLE)这个方法,其中第一个就是当前要打开xml的名字。而第二个参数就是以什么样的方式打开xml,一共有四种方式:

  1. MODE_APPEND: 追加方式存储
  2. MODE_PRIVATE: 私有方式存储,其他应用无法访问
  3. MODE_WORLD_READABLE: 表示当前文件可以被其他应用读取
  4. MODE_WORLD_WRITEABLE: 表示当前文件可以被其他应用写入
    如果采用3与4两种方式创建或打开的话。这个Preferences将可以被其他应用打开,打开的时候其他应用需要得到当前应用的Context。然后通过Context.getSharedPreferences()打开。

SharePreference单例:

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

/**
 * SharePreference工具类
 */
public class SharePreferenceUtils {
    //文件名
    private static final String FILE_NAME = "setting";
    //key
    public static final String DEVICE_NAME = "device_name";
    public static final String IP = "ip";
    public static final String PORT = "port";

    /**
     * 保存数据
     */
    public static void put(Context context, String key, Object object) {
        SharedPreferences.Editor editor = getEditor(context);

        if (object instanceof String) {
            editor.putString(key, (String) object);
        } else if (object instanceof Integer) {
            editor.putInt(key, (Integer) object);
        } else if (object instanceof Boolean) {
            editor.putBoolean(key, (Boolean) object);
        } else if (object instanceof Float) {
            editor.putFloat(key, (Float) object);
        } else if (object instanceof Long) {
            editor.putLong(key, (Long) object);
        } else {
            editor.putString(key, object.toString());
        }
        editor.commit();
    }

    /**
     * 获取数据
     */
    public static Object get(Context context, String key, Object defaultValue) {
        SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
                Context.MODE_PRIVATE);

        if (defaultValue instanceof String) {
            return sp.getString(key, (String) defaultValue);
        } else if (defaultValue instanceof Integer) {
            return sp.getInt(key, (Integer) defaultValue);
        } else if (defaultValue instanceof Boolean) {
            return sp.getBoolean(key, (Boolean) defaultValue);
        } else if (defaultValue instanceof Float) {
            return sp.getFloat(key, (Float) defaultValue);
        } else if (defaultValue instanceof Long) {
            return sp.getLong(key, (Long) defaultValue);
        }
        return null;
    }

    /**
     * remove key
     */
    public static void remove(Context context,String key){
        SharedPreferences.Editor editor = getEditor(context);
        editor.remove(key);
        editor.commit();
    }

    /**
     * 判断是否包含key
     */
    public static boolean contains(Context context,String key){
        SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
                Context.MODE_PRIVATE);
        return  sp.contains(key);
    }

    /**
     * 清空数据
     */
    public static void clear(Context context){
        SharedPreferences.Editor editor  = getEditor(context);
        editor.clear();
        editor.commit();
    }

    /**
     *获取SharedPreferences.Editor
     */
    private static SharedPreferences.Editor getEditor(Context context){
        SharedPreferences sp = context.getSharedPreferences(FILE_NAME,
                Context.MODE_PRIVATE);
        return sp.edit();
    }

}

相关文章

网友评论

      本文标题:Android持久化存储之SharedPreferences

      本文链接:https://www.haomeiwen.com/subject/wbglhhtx.html