SharedPreferences只能保存簡單類型的數據,只能儲存string,int,float,long和boolean資料類型。如果需要存取比較複雜的資料類型例如類別或影像,則需要對這些資料進行編碼。
本教學操作環境: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支援的資料型別
所有基礎型別(byte/short/int/long/float/double/boolean/char 等)
String,List,Map,CharSequence等類別
#其他AIDL介面類型
所有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
#相關免費學習推薦:java基礎教學
#以上是sharedpreferences可以儲存什麼資料類型的詳細內容。更多資訊請關注PHP中文網其他相關文章!

dint是带符号位的32位整数类型;dint的表示方法及范围是“L#-2147483648~L#+2147483647”,定义为双整数或长整数,字节是电脑里的数据量单位,在计算机中,数据只用0和1这种表现形式。

时间序列数据是一种在一段时间内收集的数据类型,它通常用于金融、经济学和气象学等领域,经常通过分析来了解随着时间的推移的趋势和模式Pandas是Python中一个强大且流行的数据操作库,特别适合处理时间序列数据。它提供了一系列工具和函数可以轻松加载、操作和分析时间序列数据。在本文中,我们介绍时间序列数据的索引和切片、重新采样和滚动窗口计算以及其他有用的常见操作,这些都是使用Pandas操作时间序列数据的关键技术。数据类型Python在Python中,没有专门用于表示日期的内置数据类型。一般情况下都

MySQL性别采用多种数据类型来表示性别字段,例如CHAR、ENUM等,最终采用哪种类型,取决于实际需求以及数据存储的大小和性能。

java数据类型:1、整型;2、浮点型;3、字符型;4、布尔型;5、其他数据类型;6、引用类型;7、原始类型与封装类;8、自动装箱与拆箱;9、可变参数;10、注解;11、枚举;12、原始类型和引用类型的选择。Java是一种强类型语言,因此每种数据都有其固定类型。

decimal是MySQL中存在的精准数据类型,语法格式“DECIMAL(M,D)”。其中,M是数字的最大数(精度),其范围为“1~65”,默认值是10;D是小数点右侧数字的数目(标度),其范围是“0~30”,但不得超过M。

MySQL是世界上最流行的关系型数据库管理系统之一,因其可靠性、高安全性、高扩展性以及相对低的成本而得到了广泛应用。MySQL的数据类型定义了各种数据类型的存储方式,是MySQL的重要组成部分。本文将详解MySQL的数据类型,以及在实际应用中需要注意的一些知识点。一、MySQL的数据类型分类MySQL的数据类型可以分为以下几类:整数类型:包括TINYINT、

随着PHP8的发布,这个流行的编程语言引入了新的数据类型,这些新类型可以大大简化代码并提高代码的可读性。在本文中,我们将介绍PHP8中的四种新类型:联合类型、命名参数、只读属性和允许为空的属性,并解释它们如何为开发者带来更好的编程体验。联合类型联合类型是PHP8中引入的一种新类型,它可以让开发者在一个变量中存储多种不同类型的值。例如,一个变量可以

mysql中银行卡号用“varchar”字符串类型,因为银行卡的号码较长并且全是数字,为了方便存储,就统一存储为字符串类型。如果用“number”类型,会超出“int”类型的最大值范围,必须用“bigInteger”存储,而它不利于数据的正常转换。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

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

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

WebStorm Mac版
好用的JavaScript開發工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器