AndroidでSharedPreferencesとシーケンス化を組み合わせてオブジェクトデータを保存


前言:
最近、ユーザー登録をしているとき、多くのフォームデータを記入する必要があり、1ページですべてのデータを完全に表示することは不可能であるため、ページ分け方式を採用しています.ユーザーがデータデータを記入した後、ユーザーが記入したデータを一時的に記録する必要があるため、ユーザーがこのページに表示し、修正することができます.この問題を最初に解決するには、データのサイズの観点から解決する必要があります.そこで、以下の方法があります.
A、一時静的変数staticを用いてメモリに保存する
B、SharedPreferencesで保存
C、SQLiteデータベースの運用
まず、この3つの方法の長所と短所を分析してみましょう.A、長所:使い勝手の欠点を使っています.ユーザーの携帯電話にデータがたくさんあると、staticが失われやすいです.
B、よく知られているSharedPreferencesはAndroidプラットフォームの軽量級のストレージクラスであり、Androidプラットフォームの通常のLong長整形、Int整形、String文字列型の保存方式を提供している.私にとって、こんなに多くのフォームのデータは、私は1つのsetに入りたくない(私は本当に怠け者です)、そこで彼をそばに置いた.
C、SQLiteデータベースを使うと、これは少し大砲で小鳥を打つのではないかと思います.
ここで私たちの本題に入ります.フォームのデータは、一般的にエンティティクラスであり、シーケンス化することができます.シーケンス化自体の目的は、オブジェクトの状態情報を格納または転送できる形式に変換するプロセスです.シーケンス化中に、オブジェクトは現在のステータスを一時的または永続的なストレージ領域に書き込みます.その後、オブジェクトの状態をストレージ領域から読み出したり逆シーケンス化したりすることで、オブジェクトを再作成できます.はっきり言って、最終的にはバイナリデータに変換され、
私の考えを引き出して
1.クラスオブジェクト
2.シーケンス化
3.文字列データを取得する
4.ストレージ(androidの5つのストレージ方式)
5.記憶方式によるデータ取得
6.逆シーケンス化
7.該当する対象を得る
 
次のコードを貼ります.
Person.java 
package com.example.shareddatatest;

import java.io.Serializable;

public class Person implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	String name;
	int age;
	String address;
	String education;
	String tel;

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	public String getEducation() {
		return education;
	}

	public void setEducation(String education) {
		this.education = education;
	}

	public String getTel() {
		return tel;
	}

	public void setTel(String tel) {
		this.tel = tel;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	String sex;

	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + ", address=" + address
				+ ", education=" + education + ", tel=" + tel + ", sex=" + sex
				+ "]";
	}


}

MainActivity.java
package com.example.shareddatatest;

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

import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;

public class MainActivity extends Activity {
	Person person = null;
	long startTime = 0l;
	long endTime = 0l;

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

		person = new Person();
		person.setName("LULU");
		person.setSex("bitch");
		person.setAddress("    ");
		person.setAge(20);
		person.setTel("1231312");
		person.setEducation("  ");
	}

	/**
	 *      
	 * 
	 * @param person
	 * @return
	 * @throws IOException
	 */
	private String serialize(Person person) throws IOException {
		startTime = System.currentTimeMillis();
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
		ObjectOutputStream objectOutputStream = new ObjectOutputStream(
				byteArrayOutputStream);
		objectOutputStream.writeObject(person);
		String serStr = byteArrayOutputStream.toString("ISO-8859-1");
		serStr = java.net.URLEncoder.encode(serStr, "UTF-8");
		objectOutputStream.close();
		byteArrayOutputStream.close();
		Log.d("serial", "serialize str =" + serStr);
		endTime = System.currentTimeMillis();
		Log.d("serial", "      :" + (endTime - startTime));
		return serStr;
	}

	/**
	 *       
	 * 
	 * @param str
	 * @return
	 * @throws IOException
	 * @throws ClassNotFoundException
	 */
	private Person deSerialization(String str) throws IOException,
			ClassNotFoundException {
		startTime = System.currentTimeMillis();
		String redStr = java.net.URLDecoder.decode(str, "UTF-8");
		ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(
				redStr.getBytes("ISO-8859-1"));
		ObjectInputStream objectInputStream = new ObjectInputStream(
				byteArrayInputStream);
		Person person = (Person) objectInputStream.readObject();
		objectInputStream.close();
		byteArrayInputStream.close();
		endTime = System.currentTimeMillis();
		Log.d("serial", "       :" + (endTime - startTime));
		return person;
	}

	void saveObject(String strObject) {
		SharedPreferences sp = getSharedPreferences("person", 0);
		Editor edit = sp.edit();
		edit.putString("person", strObject);
		edit.commit();
	}

	String getObject() {
		SharedPreferences sp = getSharedPreferences("person", 0);
		return sp.getString("person", null);
	}

	public void onclick(View v) {
		switch (v.getId()) {
		case R.id.button1:
			try {
				saveObject(serialize(person));
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			break;
		case R.id.button2:
			try {
				Person person = deSerialization(getObject());
				Log.d("serial", person.toString());
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			break;
		default:
			break;
		}
	}

}

logcatの結果は次のとおりです.