您现在的位置是:群英 > 开发技术 > 编程语言
SharedPreferences存储什么数据,方法是什么?
Admin发表于 2022-01-22 17:57:201281 次浏览

    SharedPreferences可以存储什么数据?SharedPreferences是Android平台上的一个轻量级的存储量,用来存储少量数据时比较方便,简单。但是,SharedPreferences只能保存简单类型的数据。接下来我们详细的了解一下。

    本教程操作环境:windows7系统、java10版、Dell G3电脑。

    日常开发中我们常常要用到保存数据,Android中常用的存储方式有SQLite,sharedPreferences 等,当然也有各自的应用场景,前者适用于保存较多数据的情形,后者责倾向于保存用户偏好设置比如某个checkbox的选择状态,用户登录的状态、配置信息,实现记住密码功能等等,都是以键值对的形式进行的文件读取。

    但是每存储一个数据都要提供一个key,如果要存储多个数据那岂不是要写多个key?例如我们要保存一个用户的登录信息,比如用户昵称,个性签名,登录时间………尼玛我一条数据写一个的话我都可以玩一盘撸啊撸了反正我是受不了那么我们能否将用户信息封装起来,统一以一个key来保存呢?答案是肯定可以的~
    Java类库中提供的字节输入输出流可以轻松帮我们完成任意类型到String的可逆转换,继而我们就可以保存到Share中了~

    SharedPreferences只能保存简单类型的数据,例如四种基本类型(int,float,long,boolean)+String。如果需要存取比较复杂的数据类型比如类或者图像,则需要对这些数据进行编码,通常将其转换成Base64编码,然后将转换后的数据以字符串的形式保存在XML文件中。

    简单使用:

    可保存的类型:

    string,int,float,long,boolean

		//获取sharedPreferences对象
        SharedPreferences sharedPreferences = getSharedPreferences("zjl", Context.MODE_PRIVATE);
        //获取editor对象
        SharedPreferences.Editor editor = sharedPreferences.edit();//获取编辑器
        //存储键值对
        editor.putString("name", "周杰伦");

        editor.putInt("age", 24);
        editor.putBoolean("isMarried", false);
        editor.putLong("height", 175L);
        editor.putFloat("weight", 60f);

        editor.putStringSet("where", set);
        //提交
        editor.commit();//提交修改





        SharedPreferences sharedPreferences = getSharedPreferences("zjl", Context.MODE_PRIVATE);
        //getString()第二个参数为缺省值,如果preference中不存在该key,将返回缺省值
        String name = sharedPreferences.getString("name", "");
        int age = sharedPreferences.getInt("age", 1);

    存储对象:

    方法一:fastJson/Gson/Jackson将对象转换成字符串,然后再保存。

    方法二:ObjectOutputStream将对象转化成流,base64将流转成字符串,然后再保存。

package com.example.draggridview;

/**
 * Created by Administrator on 2017/6/19.
 */

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.util.Base64;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

/**
 * SharedPreferences工具类,可以保存object对象
 */
public class SharedPreferenceUtil {

    /**
     * 存放实体类以及任意类型
     *
     * @param context 上下文对象
     * @param key
     * @param obj
     */
    public static void putBean(Context context, String key, Object obj) {
        if (obj instanceof Serializable) {// obj必须实现Serializable接口,否则会出问题
            try {
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                ObjectOutputStream oos = new ObjectOutputStream(baos);
                oos.writeObject(obj);
                String string64 = new String(Base64.encode(baos.toByteArray(), 0));
                SharedPreferences.Editor editor = getSharedPreferences(context).edit();
                editor.putString(key, string64).commit();
            } catch (IOException e) {
                e.printStackTrace();
            }

        } else {
            throw new IllegalArgumentException("the obj must implement Serializble");
        }

    }

    public static Object getBean(Context context, String key) {
        Object obj = null;
        try {
            String base64 = getSharedPreferences(context).getString(key, "");
            if (base64.equals("")) {
                return null;
            }
            byte[] base64Bytes = Base64.decode(base64.getBytes(), 1);
            ByteArrayInputStream bais = new ByteArrayInputStream(base64Bytes);
            ObjectInputStream ois = new ObjectInputStream(bais);
            obj = ois.readObject();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return obj;
    }
    
}

    参考:

    使用SharedPreference保存list数据,其实可以保存Object对象

    Android开发笔记——SharedPreferences 存储实体类以及任意类型

Android数据持久化之SharedPreference

    AIDL支持的数据类型

  1. 所有基础类型(byte/short/int/long/float/double/boolean/char 等)

  2. String,List,Map,CharSequence等类

  3. 其他AIDL接口类型

  4. 所有Parcelable的类

    bundle可传递数据类型:

    1、byte/short/int/long/float/double/boolean/char等八种基本类型或它们对应的数组

    2、String、charsequence或对应的数组,也可以是对象()或对象数组。

    3、Bundle.putSerializable(Key,Object); //实现Serializable接口的对象

    4、Bundle.putParcelable(Key, Object); //实现Parcelable接口的对象

    intent可传递数据类型:

    intent传递类型(abcd)

    A、Serializable B、charsequence C、Parcelable D、Bundle

    1、八种基本数据类型 及其对应数组

    2、String/Charsequence 及其对应数组

    3、Parcelable 及其对应数组 /Serializable

    4、bundle/intent

    现在大家对于SharedPreferences可以存储什么数据都清楚了吧,希望对大家学习sharedpreferences的使用有帮助,想要了解更多可以继续浏览群英网络其他相关的文章。

文本转载自PHP中文网

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

相关信息推荐
2022-06-16 17:06:09 
摘要:golang实现自举的方法:首先安装【Go 1.4】或更高版本;然后使用现有的Go工具链创建【Go 1.5】工具链的一个基本版本;最后进一步用它构建【go_bootstrap】和其余的标准库和标准组件。
2022-05-25 17:36:52 
摘要:下面由golang教程栏目给大家介绍go的 & 和 * 的区别,以及应用场景 ,希望对需要的朋友有所帮助!
2022-05-27 18:02:21 
摘要:Java中split方法主要用于分隔字符串,可以根据匹配给定的正则表达式来拆分字符串;语法格式“String.split(String regex, int limit)”,参数regex指定正则表达式分隔符,limit指定分割的份数。
云活动
推荐内容
热门关键词
热门信息
群英网络助力开启安全的云计算之旅
立即注册,领取新人大礼包
  • 联系我们
  • 24小时售后:4006784567
  • 24小时TEL :0668-2555666
  • 售前咨询TEL:400-678-4567

  • 官方微信

    官方微信
Copyright  ©  QY  Network  Company  Ltd. All  Rights  Reserved. 2003-2019  群英网络  版权所有   茂名市群英网络有限公司
增值电信经营许可证 : B1.B2-20140078   粤ICP备09006778号
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
微信公众号
返回顶部
返回顶部 返回顶部