Android SharedPreferences

Posted 可爱的黑精灵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android SharedPreferences相关的知识,希望对你有一定的参考价值。

在日常的开发工作中,经常需要将一些少量配置信息(机器或是设备)持久化的保存在本地。这时候使用数据库就会闲的很笨重,而且确实如此。SharedPreferences作为一个很轻量级存储类是比较好的选择

本篇就此简单SharedPreferences的应用。

SharedPreferences简介

SharedPreferences是用来存储一些简单的配置文件的机制,SharedPreferences使用Map数据结构来存储数据(key-value)。采用XML格式将数据存储到设备中。


<?xml version=‘1.0‘ encoding=‘utf-8‘ standalone=‘yes‘ ?>

<map>

   <string name="name">chenjy</string>

   <int name="age" value="18" />

</map>

SharedPreferences使用

获取SharedPreferences有两种方式:

1.1 调用Context对象的getSharedPreferences()方法,可以被用一个应用程序下的其他组件共享。

2.2 调用Activity对象的getPreferences()方法,该对象只能在Activity中使用。

SharedPreferences的四种操作模式:

Context.MODE_PRIVATE:默认的操作模式,代表改文件为私有数据,只能被应用本身访问。该模式下,写入的文件会覆盖原文件。

Context.MODE_APPEND:改模式会检查文件是否存在,如果存在就往文件追加内容否则就创建新文件。

Context.MODE_WORLD_READABLE:表示当前文件可以被其他应用读取。

Context.MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。

SharedPreferences源码

SharedPreferences通过SharedPreferences.Editor来存储数据

  • SharedPreferences.Editor.putIntSharedPreferences.Editor.putStringkey value值。

  • SharedPreferences.Editor.remove 清除指定key的字段。

  • SharedPreferences.Editor.clear 清空所有数据。


import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;

public class EasySharePreference {

    private static SharedPreferences sharedPreferences = null;
    private static SharedPreferences.Editor sp_editor = null;

    public static void init(Context c) {
        if (sharedPreferences == null) {
            sharedPreferences = PreferenceManager.getDefaultSharedPreferences(c);
        }
        if (sp_editor == null) {
            sp_editor = sharedPreferences.edit();
        }
    }

    public static SharedPreferences getPrefInstance() {
        return sharedPreferences;
    }

    public static SharedPreferences.Editor getEditorInstance() {
        return sp_editor;
    }

    // 获取名为token的`SharedPreferences`
    public static String getToken() {
        String token = sharedPreferences.getString("token", "").trim().replace("
", "");
        return token.replace(""", "");
    }

    // 存储名为token的`SharedPreferences`
    public static void saveToken(String token) {
        sp_editor.putString("token", token.trim().replace("
", "")).commit();
    }

}

MainActivity:


package com.example.chenjy.chenjy;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;


import utils.EasySharePreference;

public class MainActivity extends Activity {

    private TextView tv_token;


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

        EasySharePreference.init(getApplicationContext());

        initView();

    }

    private void initView(){

        tv_token = (TextView)findViewById(R.id.tv_token);

        EasySharePreference.saveToken("chenjy");

        tv_token.setText(EasySharePreference.getToken());

    }

}

技术分享图片

SharedPreferences使用tips

  • 存储位置:文件存储在Android 目录下 datadata程序包名shared_prefs程序包名_preferences.xml

  • 存储大小:SharedPreferences 会在创建的时候把整个文件加载进内存,而且很持久的存在。如果SharedPreferences过大 线程阻塞、卡顿、GC都会有的。

以上是关于Android SharedPreferences的主要内容,如果未能解决你的问题,请参考以下文章

Android-SharedPreferences

android开发之路11(用SharedPreferences存储数据)

Android 工具类 SharedPreferences 封装

Android - 具有可序列化对象的 SharedPreferences

Android开发7:简单的数据存储(使?SharedPreferences)和文件操作

Android之SharedPreferences使用