SP的封装(数据持久化方式一)

1.先看一段描述:

Interface for accessing and modifying preference data returned by Context.getSharedPreferences(java.lang.String, int). For any particular set of preferences, there is a single instance of this class that all clients share. Modifications to the preferences must go through an SharedPreferences.Editor object to ensure the preference values remain in a consistent state and control when they are committed to storage

这段描述讲的是sp(SharedPreferences实例)获取方式:Context.getSharedPreferences(java.lang.String, int),这个方法有两个参数,第一个表示sp对应xml的文件名,第二个为这个文件的模式,私有,共有,可读,可写

修改sp需要使用编辑器:SharedPreferences.Editor,然修改后要提交:edit.commit

2.这个sp实例为整个应用程序共享,从sp维护的xml文件中,可以存取各种类型数据

3.先看看我封装SP工具类的代码,这个封装经过测试,可以很方便使用sp存取数据

package com.market.sp;

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

import java.util.Set;

import static android.R.id.edit;

/**
 * 对SharedPreference的封装
 * 在包名目录下创建一个shared_pres目录,并维护一个config.xml文件
 * 所有数据的读取和存入都是对这个文件的操作
 * Created by Administrator on 2017/6/15.
 */

public class SPUtils {

   private static  SharedPreferences sp = null;

    /**
     * 将一个boolean值存入sp文件中
     * @param ctx 上下文
     * @param key 存储节点名称
     * @param value 存储节点的值
     */
    public static void putBoolean(Context ctx, String key, boolean value){
        //如果sp为空,则获取创建一个sp对象
        if(sp == null){
            sp = ctx.getSharedPreferences("config",Context.MODE_PRIVATE);
        }
        sp.edit().putBoolean(key,value).commit();//获取sp编辑器,放入bool值,并提交

    }

    /**
     * 根据key读取一个boolean值value,没有的话使用defvalue代替
     * @param ctx
     * @param key
     * @param defvalue
     */
    public static boolean getBoolean(Context ctx, String key, boolean defvalue){
        //如果sp为空,则获取创建一个sp对象
        if(sp == null){
            sp = ctx.getSharedPreferences("config",Context.MODE_PRIVATE);
        }
        boolean b = sp.getBoolean(key, defvalue);
        return b;

    }

    /**
     * 将一个String值存入sp文件中
     * @param context 上下文
     * @param key 存储节点名称
     * @param value 存储节点的值
     */
    public static void putString(Context context,String key,String value){
        if(sp == null){//如果sp文件不存在,则创建该文件
            sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
        }
        sp.edit().putString(key, value).commit();

    }
    /**
     * 从sp中根据key取出String值
     * @param context 上下文
     * @param key 存储节点名称
     * @param defValue 存储节点默认值
     * @return string
     */
    public static String getString(Context context,String key,String defValue){
        if(sp == null){//如果sp文件不存在,则创建该文件
            sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
        }
        String string = sp.getString(key, defValue);
        return string;

    }
    /**
     * 移除sp中的一个节点
     * @param context 上下文环境
     * @param key 节点名称
     */
    public static void removeFromSP(Context context, String key) {
        if(sp == null){//如果sp文件不存在,则创建该文件
            sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
        }
        final SharedPreferences.Editor edit = sp.edit();
        edit.remove(key);

    }
    /**
     *  从sp中根据key取出int值
     * @param context
     * @param key
     * @param defValue
     * @return
     */
    public static int getInt(Context context, String key, int defValue) {
        if(sp == null){//如果sp文件不存在,则创建该文件
            sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
        }
        int i = sp.getInt(key, defValue);
        return i;

    }
    /**
     * 将一个int值存入sp文件中
     * @param context
     * @param key
     * @param value
     */
    public static void putInt(Context context,String key,int value){
        if(sp == null){//如果sp文件不存在,则创建该文件
            sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
        }
        sp.edit().putInt(key, value).commit();

    }

    /**
     *  从sp中根据key取出float值
     * @param context
     * @param key
     * @param defValue
     * @return
     */
    public static float getFloat(Context context, String key, float defValue) {
        if(sp == null){//如果sp文件不存在,则创建该文件
            sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
        }
        float i = sp.getFloat(key, defValue);
        return i;

    }
    /**
     * 将一个float值存入sp文件中
     * @param context
     * @param key
     * @param value
     */
    public static void putFloat(Context context,String key,float value){
        if(sp == null){//如果sp文件不存在,则创建该文件
            sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
        }
        sp.edit().putFloat(key,value).commit();

    }

    /**
     *  从sp中根据key取出int值
     * @param context
     * @param key
     * @param defValue
     * @return
     */
    public static Set<String> getStringSet(Context context, String key, Set<String> defValue) {
        if(sp == null){//如果sp文件不存在,则创建该文件
            sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
        }
        Set<String> sets = sp.getStringSet(key, defValue);
        return sets;

    }
    /**
     * 将一个int值存入sp文件中
     * @param context
     * @param key
     * @param sets
     */
    public static void putStringSet(Context context,String key,Set<String> sets){
        if(sp == null){//如果sp文件不存在,则创建该文件
            sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
        }
        sp.edit().putStringSet(key,sets).commit();

    }

}

4.测试代码:

package com.market.sp;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        SPUtils.putBoolean(this,"ismy",true);
        SPUtils.putFloat(this,"myfloat",23.45f);

        Log.e(getLocalClassName(),SPUtils.getBoolean(this,"ismy",false)+"");
        Log.e(getLocalClassName(),SPUtils.getFloat(this,"myfloat",0.0f)+"");
    }

5.运行效果展示

打印结果

文件结果:可以看到在/data/data/com.market.sp/生成了shared_prefs目录,且在该目录下生成config.xml文件

文件内容查看:可见存储了两个节点float和boolean,而且我们要存储的数据都在里面

时间: 2024-09-28 18:59:00

SP的封装(数据持久化方式一)的相关文章

ios开发中的4种数据持久化方式【二、数据库 SQLite3、Core Data 的运用】

               在上文,我们介绍了ios开发中的其中2种数据持久化方式:属性列表.归档解档.本节将继续介绍另外2种iOS持久化数据的方法:数据库 SQLite3.Core Data 的运用: 在本节,将通过对4个文本框内容的创建.修改,退出后台,再重新回到后台,来认识这两种持久化数据的方式.效果图如下[图1]: [图1 GUI界面效果图] [本次开发环境: Xcode:7.2     iOS Simulator:iphone6S plus   By:啊左]     一.数据库SQL

iOS数据持久化方式分析

iOS数据持久化的方式一般为:plist文件写入.对象归档.SQLite数据库.CoreData. plist文件写入.对象归档一般用于小的数据量. SQLite数据库.CoreData则用于大的数据量. SQLite是一款轻型的数据库,是一种关系型数据库管理系统,他的设计目的是嵌入式设备中使用. SQLite占用资源非常低,非常适合移动设备中使用,而且是开源免费的 SQLite的数据库操作其实和常规的数据库操作流程是一样的: 1.打开数据库 sqlite3_open() 2.准备SQL语句,采

iOS -数据持久化方式-以真实项目讲解

前面已经讲解了SQLite,FMDB以及CoreData的基本操作和代码讲解(CoreData也在不断学习中,上篇博客也会不断更新中).本篇我们将讲述在实际开发中,所使用的iOS数据持久化的方式以及怎么会使用到这些方式,都会以本人实际开发的场景为例,大约需要花10-15分钟,欢迎大家指正. 一.前言 和大家说一个真实故事,前年我去美图面试(当时的技术仅仅是UI和接口的实现,并不注重很多底层实现和很多概念的原理,换句话说,就是真正的码农),过了技术第一轮和第二轮(前两年的也就是问问技术点的实现),

Docker 数据卷-Docker容器数据持久化方式

以tomcat为例,若是我们需要启动一个docker tomcat 容器,并将我们的工程放进tomcat启动 在没有数据卷的情况下,我们所采用的方式: 利用dockerfile将工程拷贝到tomcat 的 webapps目录下创建一个新的镜像,然后通过这个新的镜像来创建容器并启动,以此部署. 这种方式固然好用,但是却需要创建新的镜像,假如需要部署新的工程,又要创建新的镜像.很麻烦 而且,这种方式会造成重复写的问题,就是我们的工程文件实质上在docker容器和宿主机上写入了两次.造成性能损耗. 还

利用GCD进行数据持久化的方式(二)

如果各位看官看过我上一篇利用GCD持久化方式(一)那我在这里对一些相同的参数就不在做过多的介绍了,还请各位见谅. 还是按照惯例,先搞一个路径用来存储数据 NSString *path = [NSString stringWithFormat:@"%@/Documents/myData.text",NSHomeDirectory()]; NSLog(@" %@",path); 这里我们创建一条普通的异步线程就可以 dispatch_queue_t queue = di

数据持久化 技术比较

  [数据存储]coredata.sqlite.fmdb和sqlitepersistentobject 管理提醒: 本帖被 angellixf 从 OS X开发讨论区 移动到本区(2014-02-12) 分享类型:应用开发相关 在ios开发过程中,经常需要用到数据持久化工作.对于基本的配置信息等,NSUserDefault已经可以满足要求,但是对于大部分需要存储的信息,主要的方式有coredata建模或者sqlite写数据库的方法进行存储.现在针对coredata.sqlite以及常用的sqli

iOS中常用的四种数据持久化方法简介

iOS中常用的四种数据持久化方法简介 iOS中的数据持久化方式,基本上有以下四种:属性列表.对象归档.SQLite3和Core Data 1.属性列表涉及到的主要类:NSUserDefaults,一般 [NSUserDefaults standardUserDefaults]就够用了 @interface User : NSObject <NSCoding>@property (nonatomic, assign) NSInteger userID;@property (nonatomic,

iOS中常用的四种数据持久化技术

iOS中的数据持久化方式,基本上有以下四种:属性列表 对象归档 SQLite3和Core Data 1.属性列表涉及到的主要类:NSUserDefaults,一般 [NSUserDefaults standardUserDefaults]就够用了 @interface User : NSObject <NSCoding>@property (nonatomic, assign) NSInteger userID;@property (nonatomic, copy) NSString *nam

iOS开发_数据存储方式

对于数据持久化的问题,博主并不准备在博文内放很多的代码进行更深一步解释,只是简单的介绍一下四种数据持久化,如有时间,会另外针对各个数据持久化的方法进行更进一步的阐述. 直接进入主题: 〈1.NSUserDefault 用来存储配置信息,开发者可以通过这个实例对象,对这些已有信息进行修改,也可以根据自己的需求创建新的配置项.这是一个系统的单例,是一个轻量级存储机制,一般用来存储用户的登录状态,一般不会用来存储复杂对象. 〈2.SQLite 用于查询需求较多的数据,擅长处理的数据类型其实与NSUse