SharedPreferences 存储对象

package com.example.atest;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.StreamCorruptedException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.codec.binary.Base64;

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity {

    TextView tv;
    SharedPreferences preferences;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv=(TextView)findViewById(R.id.aaa);
        List<Map> list=new ArrayList<Map>();
        for(int i=0;i<3;i++){
            Map map=new HashMap();
            map.put(1, true);
            map.put(2, "abcbd");
            map.put(3, "dsa");
            list.add(map);
        }
        this.saveMap(list);
        List<Map> list3=this.readMap();
        String s="";
        for(int i=0;i<3;i++){
            Map map=list3.get(i);
            s+=""+map.get(1)+map.get(2)+map.get(3);
        }
        tv.setText(s);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
    public void saveMap(List<Map> maps) {
        String keyName="";
        preferences = getSharedPreferences("abc", Context.MODE_WORLD_READABLE|Context.MODE_WORLD_WRITEABLE) ;
        // 创建字节输出流
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        try {
            // 创建对象输出流,并封装字节流
            ObjectOutputStream oos = new ObjectOutputStream(baos);
            // 将对象写入字节流
            oos.writeObject(maps);
            // 将字节流编码成base64的字符窜
            String map_Base64 = new String(Base64.encodeBase64(baos
                    .toByteArray()));
            Editor editor = preferences.edit();
            
            editor.putString("abc", map_Base64);

            editor.commit();
        } catch (IOException e) {
            // TODO Auto-generated
        }
        Log.i("ok", "存储成功");
    }
    public List<Map> readMap() {
        List<Map> list2 = null;
        preferences = getSharedPreferences("abc", Context.MODE_WORLD_READABLE|Context.MODE_WORLD_WRITEABLE) ;
        String mapBase64 = preferences.getString("abc", "");
                
        //读取字节
        byte[] base64 = Base64.decodeBase64(mapBase64.getBytes());
        
        //封装到字节流
        ByteArrayInputStream bais = new ByteArrayInputStream(base64);
        try {
            //再次封装
            ObjectInputStream bis = new ObjectInputStream(bais);
            try {
                //读取对象
                list2 = (List<Map>) bis.readObject();
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } catch (StreamCorruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return list2;
    }
}

记得下载commons-codec-1.4.jar这个包

http://download.csdn.net/detail/yaingsoul/4229579

原文地址:https://www.cnblogs.com/xing-yun/p/3310049.html