[안드로이드] Android Parcelable

2014. 3. 21. 12:54Mobile/Android



반응형

안드로이드 Android Parcelable


매번 intent로 각 필드값을 전달 하는 수법이 그많은 필드값을 보낼경우 


혹은 기본타입이 아닌 오브젝트 같은 컴포넌트를 보내야할경우 Intent PutExtra(); 로 가능하지 않다


자바의 Serialization 개념과 비슷하다.


Parcelable 에서 상속받아야할  describeContents , writeToParcel 필수 아래의 소스를 보고 이해해보도록...




package kr.seoul.amc.teampBEAN;

import android.os.Parcel;
import android.os.Parcelable;

public class ggariParcelable  implements Parcelable{

	private int _age;
	private String _id;
	private String _pw;
	private String _name;
	private String _phone;
	
	public  ggariParcelable(){
	}
	
	public ggariParcelable(int _age, String _id, String _pw, String _name,
			String _phone) {
		super();
		this._age = _age;
		this._id = _id;
		this._pw = _pw;
		this._name = _name;
		this._phone = _phone;
	}
	public ggariParcelable(Parcel in) {
		readFromParcel(in);
	}

	public int get_age() {
		return _age;
	}

	public void set_age(int _age) {
		this._age = _age;
	}

	public String get_id() {
		return _id;
	}

	public void set_id(String _id) {
		this._id = _id;
	}

	public String get_pw() {
		return _pw;
	}

	public void set_pw(String _pw) {
		this._pw = _pw;
	}

	public String get_name() {
		return _name;
	}

	public void set_name(String _name) {
		this._name = _name;
	}

	public String get_phone() {
		return _phone;
	}

	public void set_phone(String _phone) {
		this._phone = _phone;
	}

	//parcel 오브젝트 종류
	@Override
	public int describeContents() {
		return 0;
	}

	
	// 실제 오브젝트
	@Override
	public void writeToParcel(Parcel dest, int flags) {
		dest.writeInt(_age);
		dest.writeString(_id);
		dest.writeString(_pw);
		dest.writeString(_name);
		dest.writeString(_phone);
	}
	
	// 복구하는 생성자 writeToParcel 에서 기록한 순서를 똑같이 해줘야함
	public void readFromParcel(Parcel in) {
		_age = in.readInt();
		_id = in.readString();
		_pw = in.readString();
		_name = in.readString();
		_phone = in.readString();
	}
	
	//creator  정의 안하면 에러발생 
	//Parcelable protocol requires a Parcelable.Creator object called CREATOR
	//상수 정의 여서 static fianl ?
	@SuppressWarnings("rawtypes")
	public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {

		@Override
		public ggariParcelable createFromParcel(Parcel in) {
			return new ggariParcelable(in);
		}

		@Override
		public ggariParcelable[] newArray(int size) {
			// TODO Auto-generated method stub
			return new ggariParcelable[size];
		}

	};
}

/**
 * 사용하는방법
 * ggariParcelable  ggari = new ggariParcelable();
 * ggari.set_id("ggari"); ggari.set_pw("1234");  //필드값 입력
 * 
 * Intent intent = new Intent(context, xxx.class);
 * intent.putExtra ("ggariParcelable", ggari);
 * StartActivity(intent);
 * ***************************************************************
 * ***************************************************************
 * 인텐트를 받는 클랠스 부분
 * 	Bundle bundle = getIntent().getExtras();
 *  ggariParcelable ggari  = bundle.getParcelable("ggariParcelable");
 * 
 * 
 * ArrayList 를 이용해 값을 보낼경우
 * ArrayList <ggariparcelable> ggari = new ArrayList<ggariparcelable>();
 * temp.set_age(20);
 * temp.set_name("ggari);
 * temp.set_pw("1234");
 * ggari.add(temp);
 * 
 * Intent intent = new Intent(context, xxx.class);
 * intent.putParcelableArrayListExtra("ggari, ggari);
 * startActivity(intent);
 * 
 * 받는곳에서
 * ArrayList <ggariparcelable> ggari = new ArrayList<ggariparcelable>();
 * Intent intent = getIntent();
 * ggari = intent.getParcelableArrayListExtra("ggari);
 * 
 * 
 */
반응형