android 存储集合对象,Android 使用SharedPreferences保存各种数据(List,Map,对象等)... - 简书...

简介

存储List数据到本地的方式有很多种,对于不想用sqlite或者其他方式,又或是数据量很少的话,不妨可以试下用 SharedPreferences保存。由于SharedPreferences只能保存Map型的数据,必须要做其他转换才行。

应用场景

用于保存各种List数据,最常见的莫过于,ListView、Gridviw、RecyclerView中的数据,常用的类型会被使用到的可能会有:

List

List>

List

其实不只这些复杂,简单的类型同样也可以保存。

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 void setDataList(String tag, List 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 List getDataList(String tag) {

List datalist=new ArrayList();

String strJson = preferences.getString(tag, null);

if (null == strJson) {

return datalist;

}

Gson gson = new Gson();

datalist = gson.fromJson(strJson, new TypeToken>() {

}.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 listBean;

private ArrayList listString;

private ArrayList> 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();

listBean = new ArrayList();

listMap = new ArrayList>();

}

@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 map=new HashMap();

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 泛型定义

*/

public static void putObject(Context context, String key, T obj) {

try {

put(context, key, obj);

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 获取对象

*

* @param context 上下文

* @param key 键

* @param 指定泛型

* @return 泛型对象

*/

public static 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 void setDataList(String tag, List 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 List getDataList(String tag) {

List datalist=new ArrayList<>();

String strJson = sp.getString(tag, null);

if (null == strJson) {

return datalist;

}

Gson gson = new Gson();

datalist = gson.fromJson(strJson, new TypeToken>() {

}.getType());

return datalist;

}

/**

* 存储Map集合

* @param key 键

* @param map 存储的集合

* @param 指定Map的键

* @param 指定Map的值

*/

public void setMap(String key , Map 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 Map getMap(String key){

Map map = new HashMap<>();

String strJson = sp.getString(key,null);

if (strJson == null){

return map;

}

Gson gson = new Gson();

map = gson.fromJson(strJson,new TypeToken >(){}.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;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值