首页后端开发其他后端知识SharedPreferences存储什么数据,方法是什么?

SharedPreferences存储什么数据,方法是什么?

时间2024-03-28 20:22:03发布访客分类其他后端知识浏览362
导读:SharedPreferences可以存储什么数据?SharedPreferences是Android平台上的一个轻量级的存储量,用来存储少量数据时比较方便,简单。但是,SharedPreferences只能保存简单类型的数据。接下来我们详...

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中文网

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: SharedPreferences存储什么数据,方法是什么?
本文地址: https://pptw.com/jishu/655176.html
Java中equals与等号区别在哪,用法是什么? HTML中隐藏input标签的方法是什么?

游客 回复需填写必要信息