系列化

需求分析:将一些数据保存到文件中,下次读取出来用。

实现代码:

1、TestSerializable.java文件

package com.ansdk.sdktest;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.io.StreamCorruptedException;
import java.util.ArrayList;
import java.util.HashMap;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class TestSerializable extends Activity {

    Button but1, but2;
    TextView tv1, tv2;
    int count = 0;
    private static String mSDCARD = null;
//  ArrayList<HashMap<String, Object>> arrayList;
//  ArrayList<HashMap<String, Object>> arrayList2;


    ArrayList<HashMap<String, Stu>> arrayList3;
    ArrayList<HashMap<String, Stu>> arrayList4;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main2);

        but1 = (Button) findViewById(R.id.but1);
        but2 = (Button) findViewById(R.id.but2);

        tv1 = (TextView) findViewById(R.id.tv1);
        tv2 = (TextView) findViewById(R.id.tv2);

//      arrayList = new ArrayList<HashMap<String, Object>>();
//      HashMap<String, Object> map = new HashMap<String, Object>();
//      map.put("id", "1");
//      map.put("name", "xuliehua");
//      HashMap<String, Object> map1 = new HashMap<String, Object>();
//      map1.put("id", "2");
//      map1.put("name", "fanxuliehua");
//      
//      arrayList.add(map);
//      arrayList.add(map1);

        HashMap<String, Stu> map3 = new HashMap<String, Stu>();
        map3.put("id", new Stu("张三",28));
        map3.put("name", new Stu("李四",108));

        HashMap<String, Stu> map4 = new HashMap<String, Stu>();
        map4.put("id", new Stu("胡七",666));
        map4.put("name", new Stu("王八",999));

        arrayList3 = new ArrayList<HashMap<String, Stu>>();
        arrayList3.add(map3);
        arrayList3.add(map4);

        String filenameString = getHcExternalFile("ddddd", "/object" + ".obj");
        final File file = new File(filenameString);

        but1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                // 序列化
                try {



                    FileOutputStream fis = new FileOutputStream(file);
                    ObjectOutputStream ois = new ObjectOutputStream(fis);
//                  ois.writeObject(arrayList);
                    ois.writeObject(arrayList3);
                    ois.close();
                    fis.close();

                    System.out.println("系列化结束");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });

        but2.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                try {
                    FileInputStream fis = new FileInputStream(file);
                    ObjectInputStream ois = new ObjectInputStream(fis);
//                  arrayList2 = (ArrayList<HashMap<String, Object>>) ois.readObject();
                    arrayList4 = (ArrayList<HashMap<String, Stu>>) ois.readObject();
                    ois.close();
                    fis.close();
//                  if (arrayList2 != null) {
//                      tv2.setText(arrayList2.get(0).get("name").toString());
//                  }




                    if (arrayList4 != null) {


                        for (int i = 0; i < arrayList4.size(); i++) {
                            HashMap<String, Stu>  fffHashMap=arrayList4.get(i);

                            for (String key : fffHashMap.keySet()) {  

                                Stu sssStu=fffHashMap.get(key);
                                System.out.println("key= "+ key + " and value= " +sssStu.getAge()+" "+sssStu.getName() );  
                            }  

                        }

                        Stu ssstStu=arrayList4.get(0).get("name");

                        tv2.setText(ssstStu.getAge()+" "+ ssstStu.getName());
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public static String getHcExternalFile(String subFolder, String fileName) {
        try {
            String subFolderPath = getSDCardPath() + "/handcent/" + subFolder
                    + "/";
            File fi = new File(subFolderPath);
            if (!fi.exists()) {
                fi.mkdirs();

            }
            return fi.getAbsolutePath() + fileName;
        } catch (Exception exp) {
            exp.printStackTrace();
            return null;
        }

    }

    public static String getSDCardPath() {
        if (mSDCARD == null) {
            mSDCARD = Environment.getExternalStorageDirectory().toString();
            if (mSDCARD == null) {
                mSDCARD = "/sdcard";
            }
        }
        return mSDCARD;
    }
}

class Stu implements Serializable{
    int age;
    String name;

    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Stu(){

    }

    public Stu(String n,int a){
        name=n;
        age=a;
    }
}

2、布局文件
main2.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/tv1"
        android:layout_width="130dp"
        android:layout_height="50dp"
        android:layout_gravity="center_horizontal"
        android:text="系列化"
        android:gravity="center"
        android:textColor="#0000ff"
        android:textSize="16dp" />

    <Button
        android:id="@+id/but1"
        android:layout_width="130dp"
        android:layout_height="50dp"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="3dp"
        android:text="系列化" />

    <TextView
        android:id="@+id/tv2"
        android:layout_width="130dp"
        android:layout_height="50dp"
        android:layout_gravity="center_horizontal"
        android:text="反系列化"
        android:gravity="center"
        android:textColor="#0000ff"
        android:textSize="16dp" />

    <Button
        android:id="@+id/but2"
        android:layout_width="130dp"
        android:layout_height="50dp"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="3dp"
        android:text="反系列化" />


</LinearLayout>

优化

android更好的方式是使用Parcelable;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值