SharedPreferences中儲存bean類集合或者儲存bean類
儲存List資料到本地的常用方式一般是用sqlite,但是如果不想用sqlite,或者資料量很少,使用SharedPreferences也是一種不錯的選擇。
本案例需要注意兩點
- 此Demo的json解析使用的是fastjson , 使用demo中的方法之前一定要新增fastjson 依賴 , fastjson 教程可以參考:https://github.com/alibaba/fastjson
- 這個需要特別注意 , 本人踩的坑 . 實體類需要有一個空的建構函式 , 否則會報錯: com.alibaba.fastjson.JSONException: default constructor not
found……
有錯誤的地方請指正 , 大家多多交流.
程式碼如下
MainActivity類程式碼:
package com.example.li_yx.spdemo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import com.alibaba.fastjson.JSON;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button mSaveBeanList;
private Button mGetBeanList;
private ArrayList<Teacher> mTeachers;
private Button mGetBean;
private Button mSaveBean;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSaveBeanList = findViewById(R.id.saveBeanList);
mGetBeanList = findViewById(R.id.getBeanList);
mGetBean = findViewById(R.id.getBean);
mSaveBean = findViewById(R.id.saveBean);
initData();
mSaveBeanList.setOnClickListener(this);
mGetBeanList.setOnClickListener(this);
mSaveBean.setOnClickListener(this);
mGetBean.setOnClickListener(this);
}
private void initData() {
mTeachers = new ArrayList<>();
ArrayList<Student> students = new ArrayList<>();
Student studentone = new Student("student_one", 12);
Student studenttwo = new Student("student_two", 15);
students.add(studentone);
students.add(studenttwo);
Teacher teacher1 = new Teacher("ljl", 27, students);
Teacher teacher2 = new Teacher("lyx", 22, students);
mTeachers.add(teacher1);
mTeachers.add(teacher2);
}
@Override
public void onClick(View v) {
int id = v.getId();
switch (id) {
case R.id.saveBeanList:
saveBeanList();
break;
case R.id.getBeanList:
getBeanList();
break;
case R.id.saveBean:
saveBean();
break;
case R.id.getBean:
getBean();
break;
default:
break;
}
}
private void saveBean() {
Student student = new Student("羅輯", 32);
String str = JSON.toJSONString(student);
CtsSPUtil.put(MainActivity.this, "TestTwo", str);
}
public void getBean() {
String testTwo = (String) CtsSPUtil.get(MainActivity.this, "TestTwo", "");
Student student = parseObject(testTwo, Student.class);
System.out.println(student);
}
private void saveBeanList() {
String str = JSON.toJSONString(mTeachers);
CtsSPUtil.put(MainActivity.this, "TestOne", str);
}
public void getBeanList() {
String testOne = (String) CtsSPUtil.get(MainActivity.this, "TestOne", "");
List<Teacher> teachers = parseArray(testOne, Teacher.class);
System.out.println(teachers.size());
}
public static <T> List<T> parseArray(String jsonString, Class<T> clazz) {
if (TextUtils.isEmpty(jsonString)) return null;
return JSON.parseArray(jsonString, clazz);
}
public static <T> T parseObject(String jsonString, Class<T> clazz) {
if (TextUtils.isEmpty(jsonString)) return null;
return JSON.parseObject(jsonString, clazz);
}
}
CtsSPUtil工具類:
package com.example.li_yx.spdemo;
import android.content.Context;
import android.content.SharedPreferences;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Map;
public class CtsSPUtil {
/**
* 儲存在手機裡面的檔名
*/
public static final String FILE_NAME = "cts_sp_data";
/**
* 儲存資料的方法,我們需要拿到儲存資料的具體型別,然後根據型別呼叫不同的儲存方法
*/
public static void put(Context context, String key, Object object) {
SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
if (object instanceof String) {
editor.putString(key, (String) object);
} else if (object instanceof Integer) {
editor.putInt(key, (Integer) object);
} else if (object instanceof Boolean) {
editor.putBoolean(key, (Boolean) object);
} else if (object instanceof Float) {
editor.putFloat(key, (Float) object);
} else if (object instanceof Long) {
editor.putLong(key, (Long) object);
} else {
editor.putString(key, object.toString());
}
SharedPreferencesCompat.apply(editor);
}
/**
* 得到儲存資料的方法,我們根據預設值得到儲存的資料的具體型別,然後呼叫相對於的方法獲取值
*/
public static Object get(Context context, String key, Object defaultObject) {
SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
if (defaultObject instanceof String) {
return sp.getString(key, (String) defaultObject);
} else if (defaultObject instanceof Integer) {
return sp.getInt(key, (Integer) defaultObject);
} else if (defaultObject instanceof Boolean) {
return sp.getBoolean(key, (Boolean) defaultObject);
} else if (defaultObject instanceof Float) {
return sp.getFloat(key, (Float) defaultObject);
} else if (defaultObject instanceof Long) {
return sp.getLong(key, (Long) defaultObject);
}
return null;
}
/**
* 移除某個key值已經對應的值
*/
public static void remove(Context context, String key) {
SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.remove(key);
SharedPreferencesCompat.apply(editor);
}
/**
* 清除所有資料
*/
public static void clear(Context context) {
SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.clear();
SharedPreferencesCompat.apply(editor);
}
/**
* 查詢某個key是否已經存在
*/
public static boolean contains(Context context, String key) {
SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
return sp.contains(key);
}
/**
* 返回所有的鍵值對
*/
public static Map<String, ?> getAll(Context context) {
SharedPreferences sp = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE);
return sp.getAll();
}
/**
* 建立一個解決SharedPreferencesCompat.apply方法的一個相容類
*/
private static class SharedPreferencesCompat {
private static final Method sApplyMethod = findApplyMethod();
/**
* 反射查詢apply的方法
*/
@SuppressWarnings({"unchecked", "rawtypes"})
private static Method findApplyMethod() {
try {
Class clz = SharedPreferences.Editor.class;
return clz.getMethod("apply");
} catch (NoSuchMethodException e) {
}
return null;
}
/**
* 如果找到則使用apply執行,否則使用commit
*/
public static void apply(SharedPreferences.Editor editor) {
try {
if (sApplyMethod != null) {
sApplyMethod.invoke(editor);
return;
}
} catch (IllegalArgumentException e) {
} catch (IllegalAccessException e) {
} catch (InvocationTargetException e) {
}
editor.commit();
}
}
}
Teacher類:
package com.example.li_yx.spdemo;
import java.util.ArrayList;
public class Teacher {
private String name;
private int age;
private ArrayList<Student> mStudents;
public Teacher(){}
public Teacher(String name, int age, ArrayList<Student> students) {
this.name = name;
this.age = age;
mStudents = students;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public ArrayList<Student> getStudents() {
return mStudents;
}
public void setStudents(ArrayList<Student> students) {
mStudents = students;
}
}
Student類:
package com.example.li_yx.spdemo;
public class Student {
private String name;
private int age;
public Student(){}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
相關推薦
SharedPreferences中儲存bean類集合或者儲存bean類
儲存List資料到本地的常用方式一般是用sqlite,但是如果不想用sqlite,或者資料量很少,使用SharedPreferences也是一種不錯的選擇。 本案例需要注意兩點 此Demo的json解析使用的是fastjson , 使用demo中
BOS新增欄位後關於儲存不上值或者儲存後顯出不出數
儲存欄位的資料時會呼叫storeFields() 儲存後會又呼叫loadFields(),其中getSelectors()方法中負責Query資料。 即新增欄位後,如果出現問題,則去繼承父類的這3個方法進行重寫。 例: public void loadFields() {
java集合框架容器 java框架層級 繼承圖結構 集合框架的抽象類 集合框架主要實現類
本文關鍵詞: java集合框架 框架設計理念 容器 繼承層級結構 繼承圖 集合框架中的抽象類 主要的實現類 實現類特性 集合框架分類 集合框架併發包 併發實現類 什麼是容器? 由一個或多個確定的元素所構成的整體叫做集合。 容器用來包裝或裝載物品的貯存器 (如箱、罐、壇)或者成形或柔軟
27-集合--Set及其子類(HashSet+LinkedHashSet+TreeSet)+二叉樹+Comparable+Comparator+雜湊表+HashSet儲存自定義物件+判斷元素唯一的方式
一、Set 1、Set:元素不可以重複,是無序的(存入和取出的順序不一致) 2、Set介面中的方法和Collection中的方法一致 3、Set集合的元素取出方式只有一種:迭代器iterator() Set set = new HashSet(); I
使用nginx image filter實現類OSS物件儲存中對圖片的實時處理
使用Nginx image_filter實現類似OSS圖片處理 在家使用自己的電腦做了一個小應用,可檢視照片,按以前的方式,需要在使用者上傳圖片後對進行裁剪壓縮,然後給前段一個縮圖地址與原圖地址。這種方式有兩個弊端磁碟空間的浪費、縮圖尺寸調整不便捷。是否有其他不使用雲OSS儲存的情況下自己實現一
Map 類集合 K/V儲存 null 值情況
摘自阿里的《Java開發手冊》 【推薦】高度注意 Map 類集合 K/V 能不能儲存 null 值的情況,如下表格: Hashtable 不允許為 null 不允許為 null Dictionary 執行緒安全
集合中的集合_儲存和遍歷(增強型for迴圈和迭代器)
package GuanQia3_test2_集合中套集合_第一次沒想明白; /* * 一個學科中有若干班級,每一個班級又有若干學生。整個學科一個大集合, * 若干個班級分為每一個小集合(集合巢狀之HashSet巢狀HashSet)。要求如下 * 1、 學生類有兩個屬
List集合迴圈儲存物件時,導致迴圈後集閤中全部資料都是最後一條的情況
在處理資料,List集合迴圈儲存物件時,發現迴圈後集閤中全部資料都是最後一條的情況。 code: ... AlarmInfo ai = new AlarmInfo(); //建立物件 List
MFC中關於檔案的讀取和儲存(使用CFile與CFileDialog類)
CFile::modeCreate 構造新檔案,如果檔案存在,則長度變為0 CFile::modeNoTruncate 該屬性和modeCreate聯合使用,可以達到如下效果:如果檔案存在,則不會將檔案的長度置為0,如果不存在,則會由modeCreate屬性來建立一個新檔案。
J2ee專案從0搭建(十一):在專案中整合Redis,用於資料的儲存或者快取
一、Redis安裝 已經安裝好redis的可以直接進入下一步,沒有的可以先進行安裝:Linux(CentOS 7)Redis 安裝 二、pom依賴: Jedis是redis的java版本的客戶端實現 <dependency> <group
黑馬程式設計師—集合將自定義物件作為元素儲存到ArrayList集合中,並去除重複元素。 比如:存人物件。同姓名同年齡,視為同一個人,為重複元素。
package fourteen; import java.util.*; public class eleven {/**將自定義物件作為元素儲存到ArrayList集合中,並去除重複元素。比如:存人物件。同姓名同年齡,視為同一個人,為重複元素。思路:1.對人描述,將資料封裝儘速物件。2.定義容器將人存入。
SharedPreferences的操作類,儲存和獲取更簡單,本類單例
<span style="font-size:18px;">public class SPUtils { // private static UserSP instance; public static SharedPreferences sp; pu
Matlab中對影象應用plot或者rectangle後的影象儲存問題
我們處理好影象後,為了標識出影象的目標區域來,需要利用plot函式或者rectangle函式,這樣標識目標後,就儲存影象。一般的儲存影象可以利用figure中的edit選單中的copy figure,這樣可以完成,但是儲存後的影象外圍多了一片區域,這是figure的區域,
Java集合框架篇-59-TreeSet儲存基本資料型別和自定義類物件
這篇開始,我們來學習Set介面的另外一個實現子類TreeSet。TreeSet一般是需要排序才使用的一種集合儲存方式,由於繼承了Set介面,TreeSet也能實現元素的唯一。下面通過兩個練習
檢視SharedPreferences中儲存的資料
Android開發中一般都是將配置檔案儲存至 SharedPreferences 中,除了使用 getString 等方法獲取儲存的值之外有什麼辦法可以直觀的看到所儲存的值呢? 答案是使用 adb 工具。 步驟: 一、開啟命令提示符(W
ArrayList集合中的字串資料儲存到文字檔案|文字檔案中讀取資料到集合
package cn.itcast_02; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; /
Java中最常用的集合類框架之 HashMap
tor nbsp 兩種 lca 元素 adf boolean 線程 進行 一、HashMap的概述 HashMap可以說是Java中最常用的集合類框架之一,是Java語言中非常典型的數據結構。 HashMap是基於哈希表的Map接口實現的,此實現
Spring中IOC容器對數組,集合的相關bean的裝配
art prop emp pri val 對數 try ioc容器 blog <bean id="department" class="com.pojo.Department"> <property name="name" val
淺談JAVA中字符串常量的儲存位置
數據 每一個 [] jit 返回 inf post 符號 boolean 在講述這些之前我們需要一些預備知識: Java的內存結構我們可以通過兩個方面去看待它。 一、從抽象的JVM的角度去看。相關定義請參考JVM規範:Chapter 2. The Structure o
扒一扒系列之開發中常用的Java集合類(ArrayList篇 jdk 1.7)
mda des obj 初始設置 onu util private 內部 會有 關於這個系列,因為開發主要用的是java語言,一直想寫寫java開發中常用的一些類(雖然這才是開始的第三篇>_<),所有就起了“扒一扒”系列。這個系列會有框架