搜尋
首頁JavaJava基礎sharedpreferences可以儲存什麼資料類型

SharedPreferences只能保存簡單類型的數據,只能儲存string,int,float,long和boolean資料類型。如果需要存取比較複雜的資料類型例如類別或影像,則需要對這些資料進行編碼。

sharedpreferences可以儲存什麼資料類型

本教學操作環境:windows7系統、java10版、Dell G3電腦。

日常開發中我們常常要用到保存數據,Android中常用的存儲方式有SQLite,sharedPreferences 等,當然也有各自的應用場景,前者適用於保存較多數據的情形,後者責傾向於保存使用者偏好設定例如某個checkbox的選擇狀態,使用者登入的狀態、設定訊息,實現記住密碼功能等等,都是以鍵值對的形式進行的檔案讀取。

但是每儲存一個資料都要提供一個key,如果要儲存多個資料那豈不是要寫多個key?例如我們要保存一個用戶的登入訊息,例如用戶暱稱,個性簽名,登入時間………尼瑪我一條數據寫一個的話我都可以玩一盤擼啊擼了反正我是受不了那麼我們能否將使用者資訊封裝起來,統一以一個key來保存呢?答案是肯定可以的~
Java類別庫中提供的位元組輸入輸出流可以輕鬆幫我們完成任意類型到String的可逆轉換,繼而我們就可以保存到Share中了~

SharedPreferences只能保存簡單類型的數據,例如四種基本類型(int,float,long,boolean) String。如果需要存取比較複雜的資料類型例如類別或影像,則需要對這些資料進行編碼,通常將其轉換成Base64編碼,然後將轉換後的資料以字串的形式保存在XML檔案中。

sharedpreferences可以儲存什麼資料類型

簡單使用:

#可儲存的類型:

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介面的物件

sharedpreferences可以儲存什麼資料類型

sharedpreferences可以儲存什麼資料類型

sharedpreferences可以儲存什麼資料類型

sharedpreferences可以儲存什麼資料類型

intent可傳遞資料型別:

intent傳遞類型(abcd)

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

1、八種基本資料型別及其對應陣列

2、String/Charsequence 及其對應陣列

3、Parcelable 及其對應陣列/Serializable

4、bundle/intent

sharedpreferences可以儲存什麼資料類型

sharedpreferences可以儲存什麼資料類型

sharedpreferences可以儲存什麼資料類型

#相關免費學習推薦:java基礎教學

#

以上是sharedpreferences可以儲存什麼資料類型的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器