首页 > 其他分享 >在Android开发中,如何使用SharedPreferences(简称SP)一个轻量级的数据存储方式

在Android开发中,如何使用SharedPreferences(简称SP)一个轻量级的数据存储方式

时间:2024-08-30 17:23:37浏览次数:12  
标签:SharedPreferences SP param static editor key public 轻量级 String

目录

全局SharedPreferences工具类

代码说明:

如何使用这个工具类?


在Android开发中,SharedPreferences(简称SP)是一个轻量级的数据存储方式,常用于保存应用的配置信息或少量的数据。为了便于在全局使用,可以将其封装到一个工具类中。

以下是一个带有详细中文注释的全局SharedPreferences存储工具类的Java代码示例:

全局SharedPreferences工具类

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

public class SPUtils {

    private static SharedPreferences sharedPreferences;
    private static SharedPreferences.Editor editor;

    // 默认的SP文件名
    private static final String SP_NAME = "app_shared_preferences";

    /**
     * 初始化SharedPreferences工具类
     * @param context 上下文对象,通常传入Application的context
     */
    public static void init(Context context) {
        if (sharedPreferences == null) {
            sharedPreferences = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE);
            editor = sharedPreferences.edit();
        }
    }

    /**
     * 保存字符串类型数据
     * @param key 键名
     * @param value 键值
     */
    public static void putString(String key, String value) {
        editor.putString(key, value);
        editor.apply(); // 异步提交
    }

    /**
     * 获取字符串类型数据
     * @param key 键名
     * @param defaultValue 默认值,当找不到对应key时返回此值
     * @return 返回字符串类型的值
     */
    public static String getString(String key, String defaultValue) {
        return sharedPreferences.getString(key, defaultValue);
    }

    /**
     * 保存整型数据
     * @param key 键名
     * @param value 键值
     */
    public static void putInt(String key, int value) {
        editor.putInt(key, value);
        editor.apply(); // 异步提交
    }

    /**
     * 获取整型数据
     * @param key 键名
     * @param defaultValue 默认值
     * @return 返回整型值
     */
    public static int getInt(String key, int defaultValue) {
        return sharedPreferences.getInt(key, defaultValue);
    }

    /**
     * 保存布尔类型数据
     * @param key 键名
     * @param value 键值
     */
    public static void putBoolean(String key, boolean value) {
        editor.putBoolean(key, value);
        editor.apply(); // 异步提交
    }

    /**
     * 获取布尔类型数据
     * @param key 键名
     * @param defaultValue 默认值
     * @return 返回布尔类型值
     */
    public static boolean getBoolean(String key, boolean defaultValue) {
        return sharedPreferences.getBoolean(key, defaultValue);
    }

    /**
     * 保存长整型数据
     * @param key 键名
     * @param value 键值
     */
    public static void putLong(String key, long value) {
        editor.putLong(key, value);
        editor.apply(); // 异步提交
    }

    /**
     * 获取长整型数据
     * @param key 键名
     * @param defaultValue 默认值
     * @return 返回长整型值
     */
    public static long getLong(String key, long defaultValue) {
        return sharedPreferences.getLong(key, defaultValue);
    }

    /**
     * 保存浮点型数据
     * @param key 键名
     * @param value 键值
     */
    public static void putFloat(String key, float value) {
        editor.putFloat(key, value);
        editor.apply(); // 异步提交
    }

    /**
     * 获取浮点型数据
     * @param key 键名
     * @param defaultValue 默认值
     * @return 返回浮点型值
     */
    public static float getFloat(String key, float defaultValue) {
        return sharedPreferences.getFloat(key, defaultValue);
    }

    /**
     * 移除指定键的数据
     * @param key 键名
     */
    public static void remove(String key) {
        editor.remove(key);
        editor.apply(); // 异步提交
    }

    /**
     * 清除所有保存的数据
     */
    public static void clear() {
        editor.clear();
        editor.apply(); // 异步提交
    }
}

代码说明:

  1. 初始化方法init(Context context)

  • 在应用启动时调用一次该方法来初始化SharedPreferences对象。通常你会在Application类中调用该方法。
  • 使用Context.MODE_PRIVATE模式,这意味着存储的数据仅对本应用可见。
  1. 数据存取方法

  • putString()getString()等方法分别用于存储和获取不同类型的数据(Stringintbooleanlongfloat)。
  • 你可以根据需要扩展支持其他类型的数据。
  • 使用editor.apply()异步提交数据,也可以使用editor.commit()同步提交,但一般推荐使用apply()以提高性能。
  1. 删除与清空数据

  • remove()方法可以删除指定键的数据。
  • clear()方法可以清除所有存储的数据。

如何使用这个工具类?

  1. 在Application中初始化

    public class MyApplication extends Application {
        @Override
        public void onCreate() {
            super.onCreate();
            // 初始化SP工具类
            SPUtils.init(this);
        }
    }
  2. 在任何地方存取数据

    // 保存数据
    SPUtils.putString("username", "张三");
    SPUtils.putInt("age", 25);
    SPUtils.putBoolean("isLoggedIn", true);
    
    // 获取数据
    String username = SPUtils.getString("username", "默认用户");
    int age = SPUtils.getInt("age", 0);
    boolean isLoggedIn = SPUtils.getBoolean("isLoggedIn", false);
    

通过这个工具类,你可以方便地在应用的任何地方进行数据存取,且不必重复编写SharedPreferences相关的代码。 

标签:SharedPreferences,SP,param,static,editor,key,public,轻量级,String
From: https://blog.csdn.net/LLZjiayou/article/details/141723214

相关文章

  • RocketMQ 与 Spring Cloud Stream之事务消息配置
    1引言RocketMQ的事务消息设计是为了解决分布式系统中数据一致性的问题。在分布式系统中,由于数据可能分布在不同的服务或节点上,因此需要一种机制来确保数据的最终一致性。事务消息通过引入本地事务和消息状态的关联,确保了消息的发送与本地事务的执行结果紧密相关,从而避免了......
  • Spring Security基于token的极简示例
    1引言SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,但是用起来有点复杂,为了便于学习理解,下面将用最简洁的配置和示例,展示整个流程。2代码创建一个spring-security-demo的项目,总共包含5个文件2.1pom.xml引入spri......
  • CRISP-DM的应用与理解
    本文分享自天翼云开发者社区《CRISP-DM的应用与理解》,作者:吴****嫄CRISP-DM是一个数据挖掘项目规划的开放标准流程框架模型,主要分为业务理解、数据理解、数据准备、建模、评估、部署六个阶段。业务理解从业务的角度理解项目的目标和需求,将业务的目的转换为一个数据挖掘的问题,制......
  • 二. Spring Boot 中的 “依赖管理和自动配置” 详解透彻到底(附+详细代码流程)sh
    二.SpringBoot中的“依赖管理和自动配置”详解透彻到底(附+详细代码流程)@目录*二.SpringBoot中的“依赖管理和自动配置”详解透彻到底(附+详细代码流程)1.如何理解“约定优于配置”2.SpringBoot依赖管理和自动配置2.1SpringBoot的依赖管理2.1.1什么......
  • Spring整合mybatis源码剖析
    Spring整合mybatis源码剖析整合原理图:@MapperScan底层原理剖析主要作用:会将MapperScannerConfigurer注册到spring容器中。@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)@Documented@Import(MapperScannerRegistrar.class)//点进去@Repeatable(Mapper......
  • Spring Task
    使用方式启动类importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.scheduling.annotation.EnableScheduling;@SpringBootApplication@EnableSchedulingpublicclas......
  • Apache顶级项目ShardingSphere — SQL Parser的设计与实现
    导语:SQL作为现代计算机行业的数据处理事实标准,是目前最重要的数据处理接口之一,从传统的DBMS(如MySQL、Oracle),到主流的计算框架(如spark,flink)都提供了SQL的解析引擎,因此想对sql进行精细化的操作,一定离不开SQLParser。ApacheShardingSphere是一套开源的分布式数据库中间件解决方......
  • 对比 Vitess,ShardingSphere 有哪些不同
    本篇为InfoQ中文站供稿原文链接:https://www.infoq.cn/article/NHSAAmN*MfpLiTiTTEu5?from=timeline&isappinstalled=0ShardingSphere是什么?ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(规......
  • KubeSphere 社区双周报| 2024.08.16-08.29
    KubeSphere社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过commit的贡献者,并对近期重要的PR进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。本次双周报涵盖时间为:2024.08.16-08.29。贡献者名单新晋KubeSpherecontribu......
  • 【CSP】坐标变换2(问题拆解,快速输入,知识补充)
    1.题目背景与任务分析题目背景本题要求对二维平面上的点进行指定角度的旋转,并输出旋转后的坐标,要求精确到小数点后六位。这类题目广泛用于考察选手对数学计算、坐标变换以及编程语言中浮点数处理的能力。任务明确输入:多个坐标点及旋转角度。输出:旋转后的新坐标,精确到小数......