Android中把bean类集合储存到本地文件中的工具类

来源:互联网 发布:征服者更新用什么网络 编辑:程序博客网 时间:2024/06/07 21:18

一、在开发中经常会遇到直接储存bean类集合的需求,如把一个List<Bean>、Set<Bean>、Map<Interger,Bean>等等内存存储的集合,永久化的存储到本地文件中。

文件化储存中Bean类要进行序列化,继承Serializable或Parceable接口。

  在这序列化的过程中,我个人遇到一些问题:

java.io.NotSerializableException: android.graphics.Paint

报错的错误,原因是:

因为在我序列化的bean类中有过处理Piant的操作,这样就会出现这报错。


二、具体实现:

  DataCacheUtils工具类:

package com.qbs.listvideodemo.activity;import android.content.Context;import android.util.Log;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.util.ArrayList;/** * @author wangyao * @package com.qbs.listvideodemo.activity * 本类 采用泛型 广泛接受 ArrayList 直接做缓存,即是开发中经常用到的 bean; * 使用注意: 传进来的 ArrayList 所绑定的 bean,一定要是 已经继承 Serializable 或者Parcelable接口的; * 使用文本流做缓存。 * @date 2017/7/29  13:51 * @describe TODO * @project */public class DataCacheUtils {    /**     * 定义一些你项目里面的 缓存文件名字 ,自定义,不要也没关系,调用函数再传入也行     */    private static String DataCache = "Data_Cache_File";    /**     * 保存 一组 数据     *     * @param ctx       上下文     * @param data      种子     * @param cacheName 缓存文件名     */    public static <T> void saveListCache(Context ctx, ArrayList<T> data, String cacheName) {        new DataCache<T>().saveGlobal(ctx, data, cacheName);    }    /**     * 直接根据 缓存文件名获取     */    public static <T> ArrayList<T> loadListCache(Context ctx, String cacheName) {        return new DataCache<T>().loadGlobal(ctx, cacheName);    }    /**     *     * @param <T> 数据缓存 save or load     */    static class DataCache<T> {        public void save(Context ctx, ArrayList<T> data, String name) {            save(ctx, data, name, "");        }        public void saveGlobal(Context ctx, ArrayList<T> data, String name) {            save(ctx, data, name, DataCache);        }        private void save(Context ctx, ArrayList<T> data, String name, String folder) {            if (ctx == null) {                return;            }            File file;            if (!folder.isEmpty()) {                File fileDir = new File(ctx.getFilesDir(), folder);                if (!fileDir.exists() || !fileDir.isDirectory()) {                    fileDir.mkdir();                }                file = new File(fileDir, name);            } else {                file = new File(ctx.getFilesDir(), name);            }            if (file.exists()) {                file.delete();            }            Log.d("everb", file.getAbsolutePath());            try {                ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));                oos.writeObject(data);                oos.close();            } catch (Exception e) {                e.printStackTrace();            }        }        public ArrayList<T> load(Context ctx, String name) {            return load(ctx, name, "");        }        public ArrayList<T> loadGlobal(Context ctx, String name) {            return load(ctx, name, DataCache);        }        private ArrayList<T> load(Context ctx, String name, String folder) {            ArrayList<T> data = null;            File file;            if (!folder.isEmpty()) {                File fileDir = new File(ctx.getFilesDir(), folder);                if (!fileDir.exists() || !fileDir.isDirectory()) {                    fileDir.mkdir();                }                file = new File(fileDir, name);            } else {                file = new File(ctx.getFilesDir(), name);            }            Log.d("everb", "file " + file.getAbsolutePath());            if (file.exists()) {                try {                    Log.d("everb", "write object");                    ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));                    data = (ArrayList<T>) ois.readObject();                    ois.close();                } catch (Exception e) {                    Log.d("everb", e.toString());                }            }            if (data == null) {     /** 如果没有 */                Log.d("everb", "data == null");                data = new ArrayList<T>();            }            return data;        }    }}



阅读全文
0 0