Android 使用SharedPreferences保存各种数据(List,Map,对象等)+ SpUtils工具
来源:互联网 发布:淘宝众筹首页 编辑:程序博客网 时间:2024/05/18 16:57
Android 使用SharedPreferences保存各种数据(List,Map,对象等)+ SpUtils工具
简介
存储List数据到本地的方式有很多种,对于不想用sqlite或者其他方式,又或是数据量很少的话,不妨可以试下用 SharedPreferences保存。由于SharedPreferences只能保存Map型的数据,必须要做其他转换才行。
应用场景
用于保存各种List数据,最常见的莫过于,ListView、Gridviw、RecyclerView中的数据,常用的类型会被使用到的可能会有:
- List<String>
- List<Map<String,Object>>
- List<JavaBean>
其实不只这些复杂,简单的类型同样也可以保存。
Gson工具
这里处理的方式时用gson把List转换成json类型,再利用SharedPreferences保存的。
例子~
ListDataSave工具类
public class ListDataSave { private SharedPreferences preferences; private SharedPreferences.Editor editor; public ListDataSave(Context mContext, String preferenceName) { preferences = mContext.getSharedPreferences(preferenceName, Context.MODE_PRIVATE); editor = preferences.edit(); } /** * 保存List * @param tag * @param datalist */ public <T> void setDataList(String tag, List<T> datalist) { if (null == datalist || datalist.size() <= 0) return; Gson gson = new Gson(); //转换成json数据,再保存 String strJson = gson.toJson(datalist); editor.clear(); editor.putString(tag, strJson); editor.commit(); } /** * 获取List * @param tag * @return */ public <T> List<T> getDataList(String tag) { List<T> datalist=new ArrayList<T>(); String strJson = preferences.getString(tag, null); if (null == strJson) { return datalist; } Gson gson = new Gson(); datalist = gson.fromJson(strJson, new TypeToken<List<T>>() { }.getType()); return datalist; } }
Userbean类,简单处理下,名字和年龄
public class Userbean { private String name; private int 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; } }
MainActivity类
public class MainActivity extends Activity implements OnClickListener { Context mContext; ListDataSave dataSave; private ArrayList<Userbean> listBean; private ArrayList<String> listString; private ArrayList<Map<String, Object>> listMap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); initView(); } private void initView() { findViewById(R.id.btn_addString).setOnClickListener(this); findViewById(R.id.btn_addJavaBean).setOnClickListener(this); findViewById(R.id.btn_addMap).setOnClickListener(this); findViewById(R.id.btn_getString).setOnClickListener(this); findViewById(R.id.btn_getJavaBean).setOnClickListener(this); findViewById(R.id.btn_getMap).setOnClickListener(this); mContext = getApplicationContext(); dataSave = new ListDataSave(mContext, "sadaharu_song"); listString = new ArrayList<String>(); listBean = new ArrayList<Userbean>(); listMap = new ArrayList<Map<String, Object>>(); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_addString: String s = "定春"; listString.add(s); dataSave.setDataList("string", listString); break; case R.id.btn_getString: Toast.makeText(mContext, dataSave.getDataList("string").toString(), Toast.LENGTH_SHORT).show(); break; case R.id.btn_addJavaBean: Userbean user = new Userbean(); user.setName("银时"); user.setAge(16); listBean.add(user); dataSave.setDataList("javaBean", listBean); break; case R.id.btn_getJavaBean: Toast.makeText(mContext, dataSave.getDataList("javaBean").toString(), Toast.LENGTH_SHORT).show(); break; case R.id.btn_addMap: Map<String, Object> map=new HashMap<String, Object>(); map.put("name","神乐"); map.put("age", 18); listMap.add(map); dataSave.setDataList("listMap", listMap); break; case R.id.btn_getMap: Toast.makeText(mContext, dataSave.getDataList("listMap").toString(), Toast.LENGTH_SHORT).show(); break; } } }
以上可以完成对着一些类型使用SharedPreferences的传递。
SharedPreferences工具类
大家也可以使用这个工具类来使用SharedPreferences传递各种数据
import android.content.Context;import android.content.SharedPreferences;import android.content.SharedPreferences.Editor;import android.text.TextUtils;import android.util.Base64;import com.google.gson.Gson;import com.google.gson.reflect.TypeToken;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class SpUtils { private static SharedPreferences sp; private static SharedPreferences.Editor editor; private static SharedPreferences getSp(Context context) { if (sp == null) { sp = context.getSharedPreferences("SpUtils", Context.MODE_PRIVATE); editor = sp.edit(); } return sp; } /** * 存入字符串 * * @param context 上下文 * @param key 字符串的键 * @param value 字符串的值 */ public static void putString(Context context, String key, String value) { SharedPreferences preferences = getSp(context); //存入数据 Editor editor = preferences.edit(); editor.putString(key, value); editor.commit(); } /** * 获取字符串 * * @param context 上下文 * @param key 字符串的键 * @return 得到的字符串 */ public static String getString(Context context, String key) { SharedPreferences preferences = getSp(context); return preferences.getString(key, ""); } /** * 获取字符串 * * @param context 上下文 * @param key 字符串的键 * @param value 字符串的默认值 * @return 得到的字符串 */ public static String getString(Context context, String key, String value) { SharedPreferences preferences = getSp(context); return preferences.getString(key, value); } /** * 保存布尔值 * * @param context 上下文 * @param key 键 * @param value 值 */ public static void putBoolean(Context context, String key, boolean value) { SharedPreferences sp = getSp(context); Editor editor = sp.edit(); editor.putBoolean(key, value); editor.commit(); } /** * 获取布尔值 * * @param context 上下文 * @param key 键 * @param defValue 默认值 * @return 返回保存的值 */ public static boolean getBoolean(Context context, String key, boolean defValue) { SharedPreferences sp = getSp(context); return sp.getBoolean(key, defValue); } /** * 保存long值 * * @param context 上下文 * @param key 键 * @param value 值 */ public static void putLong(Context context, String key, long value) { SharedPreferences sp = getSp(context); Editor editor = sp.edit(); editor.putLong(key, value); editor.commit(); } /** * 获取long值 * * @param context 上下文 * @param key 键 * @param defValue 默认值 * @return 保存的值 */ public static long getLong(Context context, String key, long defValue) { SharedPreferences sp = getSp(context); return sp.getLong(key, defValue); } /** * 保存int值 * * @param context 上下文 * @param key 键 * @param value 值 */ public static void putInt(Context context, String key, int value) { SharedPreferences sp = getSp(context); Editor editor = sp.edit(); editor.putInt(key, value); editor.commit(); } /** * 获取long值 * * @param context 上下文 * @param key 键 * @param defValue 默认值 * @return 保存的值 */ public static int getInt(Context context, String key, int defValue) { SharedPreferences sp = getSp(context); return sp.getInt(key, defValue); } /** * 保存对象 * * @param context 上下文 * @param key 键 * @param obj 要保存的对象(Serializable的子类) * @param <T> 泛型定义 */ public static <T extends Serializable> void putObject(Context context, String key, T obj) { try { put(context, key, obj); } catch (Exception e) { e.printStackTrace(); } } /** * 获取对象 * * @param context 上下文 * @param key 键 * @param <T> 指定泛型 * @return 泛型对象 */ public static <T extends Serializable> T getObject(Context context, String key) { try { return (T) get(context, key); } catch (Exception e) { e.printStackTrace(); } return null; } /** * 保存List * @param tag * @param datalist */ public <T> void setDataList(String tag, List<T> datalist) { if (null == datalist || datalist.size() <= 0) return; Gson gson = new Gson(); //转换成json数据,再保存 String strJson = gson.toJson(datalist); editor.clear(); editor.putString(tag, strJson); editor.commit(); } /** * 获取List * @param tag * @return */ public <T> List<T> getDataList(String tag) { List<T> datalist=new ArrayList<>(); String strJson = sp.getString(tag, null); if (null == strJson) { return datalist; } Gson gson = new Gson(); datalist = gson.fromJson(strJson, new TypeToken<List<T>>() { }.getType()); return datalist; } /** * 存储Map集合 * @param key 键 * @param map 存储的集合 * @param <K> 指定Map的键 * @param <T> 指定Map的值 */ public <K,T> void setMap(String key , Map<K,T> map){ if (map == null || map.isEmpty() || map.size() < 1){ return; } Gson gson = new Gson(); String strJson = gson.toJson(map); editor.clear(); editor.putString(key ,strJson); editor.commit(); } /** * 获取Map集合 * */ public <K,T> Map<K,T> getMap(String key){ Map<K,T> map = new HashMap<>(); String strJson = sp.getString(key,null); if (strJson == null){ return map; } Gson gson = new Gson(); map = gson.fromJson(strJson,new TypeToken<Map<K,T> >(){}.getType()); return map; } /**存储对象*/ private static void put(Context context, String key, Object obj) throws IOException { if (obj == null) {//判断对象是否为空 return; } ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = null; oos = new ObjectOutputStream(baos); oos.writeObject(obj); // 将对象放到OutputStream中 // 将对象转换成byte数组,并将其进行base64编码 String objectStr = new String(Base64.encode(baos.toByteArray(), Base64.DEFAULT)); baos.close(); oos.close(); putString(context, key, objectStr); } /**获取对象*/ private static Object get(Context context, String key) throws IOException, ClassNotFoundException { String wordBase64 = getString(context, key); // 将base64格式字符串还原成byte数组 if (TextUtils.isEmpty(wordBase64)) { //不可少,否则在下面会报java.io.StreamCorruptedException return null; } byte[] objBytes = Base64.decode(wordBase64.getBytes(), Base64.DEFAULT); ByteArrayInputStream bais = new ByteArrayInputStream(objBytes); ObjectInputStream ois = new ObjectInputStream(bais); // 将byte数组转换成product对象 Object obj = ois.readObject(); bais.close(); ois.close(); return obj; }}
此工具类的GitHub地址:https://github.com/sadaharusong/SpUtils
欢迎各位互相探讨,Star,Follow~
阅读全文
0 0
- Android 使用SharedPreferences保存各种数据(List,Map,对象等)+ SpUtils工具
- android 使用SharedPreferences保存list数据
- Android SharedPreferences工具类 ,实现List/Map的保存读取
- android sharedpreferences 保存 list<Map<String,Object>>数据
- [Android]用SharedPreferences保存List<Map<String, String>>数据
- Android 保存List数据(SharedPreferences)
- android SharedPreferences保存list数据
- 使用SharedPreferences对象保存数据
- Android使用SharedPreferences保存对象
- Android使用SharedPreferences保存对象
- android 使用sharedpreferences 保存对象
- android利用SharedPreferences保存list集合数据
- 用SharedPreferences保存List(Map(String, String))数据
- 用SharedPreferences、Gson分别来保存List、Map数据
- android 之 SharedPreferences 保存对象数据
- 使用SharedPreferences保存对象(图片)类型的数据
- Android 中创建SharedPreferences工具类来保存状态,标志,数据等
- Android进阶——Sharedpreferences保存对象和图片等复杂类型的数据
- Kotlin 基本语法
- web学习第四篇css样式学习
- [笔记] awk命令计算sum, min, max, avg
- (八)STM32的CAN模块实验
- 【leetcode】Two Sum
- Android 使用SharedPreferences保存各种数据(List,Map,对象等)+ SpUtils工具
- 20170911-20170917 HTML+CSS工作学习周总结
- 解决inline-block引起的空白间距问题
- 数据结构(二)数据结构与基本算法
- (六)STM32的时钟系统
- 真正的软件测试实习4--接口测试与文档撰写
- JavaScript学习——函数的实参和形参
- Qt QApplication
- 算法入门笔记--逆序对