android序列化与反序列话HashMap到sqlite数据库

本文介绍如何将Android中的HashMap进行序列化和反序列化,并将其存储到SQLite数据库中,详细阐述了相关工具类的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.首先给出序列化与反序列化工具类

public class SerializableInterface {
	public SerializableInterface(){

	}

	public static byte[] serialize(HashMap<String, String> hashMap){
        try {
       	ByteArrayOutputStream mem_out = new ByteArrayOutputStream();
			ObjectOutputStream out = new ObjectOutputStream(mem_out);

			out.writeObject(hashMap);

			out.close();
           mem_out.close();

           byte[] bytes =  mem_out.toByteArray();
           return bytes;
		} catch (IOException e) {
			return null;
		}
	}

	 public static HashMap<String, String> deserialize(byte[] bytes){
		try {
			ByteArrayInputStream mem_in = new ByteArrayInputStream(bytes);
			ObjectInputStream in = new ObjectInputStream(mem_in);

			HashMap<String, String> hashMap = (HashMap<String, String>)in.readObject();

	         in.close();
	         mem_in.close();

	   		 return hashMap;
		} catch (StreamCorruptedException e) {
			return null;
		} catch (ClassNotFoundException e) {
			return null;
		}   catch (IOException e) {
			return null;
		}
	 }
}

2.定义一个方法获取学生的信息,其中家庭成员信息保存在hashmap后,序列化到sqlite

public ArrayList<ContentValues> formatStudentInfo() {
        ArrayList<ContentValues> valueArr = null;
        ContentValues values = null;
        HashMap<String, String> map = null;

        valueArr = new ArrayList<ContentValues>();   
        //第一组数据
        values = new ContentValues(3);
                                    
        values.put("name", "david");
        values.put("class","0502");
        map = new HashMap<String, String>();
        map.put("mom", "lucy");
        map.put("dad", "jack");
        byte[] bytes = SerializableInterface.serialize(map);
        values.put("family", bytes);
        valueArr.add(values);
        
        //第二组数据
        values = new ContentValues(3);
        
        values.put("name", "joy");
        values.put("class","0502");
        map = new HashMap<String, String>();
        map.put("mom", "mary");
        map.put("dad", "json");
        bytes = SerializableInterface.serialize(map);
        values.put("family", bytes);
        valueArr.add(values);
         
        return valueArr;
    }

3.调用数据库的操作类将
formatStudentInfo返回的数据insert到数据库。
这个方法应该放在自己写的继承了SQLiteOpenHelper的类中
    public void insertAll(String databaseName,
            ArrayList<ContentValues> valuesArr) {
        SQLiteDatabase db = getWritableDatabase();
        db.beginTransaction(); 

        for (ContentValues val : valuesArr) {
            db.insert(databaseName, null, val);
        }

        db.setTransactionSuccessful(); 
        db.endTransaction();
        db.close();
    }

读取的时候调用
Cursor cursor db.query("fix your self");
.......
//通过getBlob方法获取bytes后反序列化得到map对象,参数x是序列化字段所在的列数(从0开始计数)。
byte[] bytes = cursor.getBlob(x);
HashMap<String, String> map = SerializableInterface.deserialize(bytes);


以上仅是对序列化与反序列化HashMap对象做一个简单的介绍,代码并不完整,数据库操作部分需要自己补充完整。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值