티스토리 뷰

 Android의 Parcelable 인터페이스를 알아보려고 합니다. java에는 synchronized 인터페이스를 사용하고 있고, 해당 인터페이스는 Android에서도 사용이 가능합니다. Android에서는 Parcelable 인터페이스를 통해서 내부 데이터 교환에 사용이 가능합니다.

 제가 만든 예제는 Intent에 많은 데이터를 실어보내기위해서 Parcelable를 사용하여 만들어봤습니다.


 XML 파일의 소스코드는 해당 내용에서 제외합니다. 해당 프로젝트 코드는 아래 중요 코드를 제외하고, 다운받아 테스트할 수 있습니다.


자세한 설명 및 Parcelable 인터페이스 설명은 Android Developer 사이트에서 확인 가능합니다.

  http://developer.android.com/reference/android/os/Parcelable.html


Parclable Public Method

다음 2 Method는 항상 구현이 되어야 합니다.

abstract int   describeContents()
 abstract void

 writeToParcel(Parcel dest, int flags)
  - 데이터 저장을 위한 writeToParcel Method


주요 소스코드

Parcelable 메인 - main Activity를 구현

submit.setOnClickListener(new OnClickListener() {
	@Override
	public void onClick(View v) {
		// Intent를 생성합니다.
		Intent intent = new Intent(ParcelableEX.this, ParcelableEX2.class);
		//intent에 저장하기 위해서 Parcelable를 상송받아 구현해둔 UserInfo에 객체를 생성합니다.
		intent.putExtra("user", new UserInfo(editName.getText().toString(), Integer.parseInt(editAge.getText().toString()), editEmail.getText().toString()));
		startActivity(intent);
		}
});


Parcelable 두 번째 화면 - 두 번째 Activity를 구현하고, 넘어온 값을 뿌려주기 위한 Activity

//Intent를 통해 넘어온 값을 불러옵니다.
Intent intent = getIntent();
//intent의 ParcelableExtra을 불러옵니다.
UserInfo user = intent.getParcelableExtra("user");
		
//불러온 데이터를 각각 불러와 화면에 뿌립니다.
editName.setText(user.getName());
editAge.setText(String.valueOf(user.getAge()));
editEmail.setText(user.getEamil());


Parcelable 구현 - Parcelable 인터페이스를 상속 받아 구현

//Parcelable를 생성하기 위한 생성자 //임의 생성
public UserInfo(String name, int age, String email) {
	this.mName = name;
	this.mAge = age;
	this.mEmail = email;
}
//Parcelable를 생성하기 위한 생성자 Parcel를 파라메타로 넘겨 받음
private UserInfo(Parcel source) {
	// TODO Auto-generated constructor stub
	mName = source.readString();
	mAge = source.readInt();
	mEmail = source.readString();
}

//각 값을 넘겨주기 위한 get터 생성
public String getName() {
	return mName;
}

public int getAge() {
	return mAge;
}
	
public String getEamil() {
	return mEmail;
}

//Parcelable을 상속 받으면 필수 Method
@Override
public int describeContents() {
	// TODO Auto-generated method stub
	return 0;
}

//Parcelable의 write를 구현하기 위한 Method
@Override
public void writeToParcel(Parcel arg0, int arg1) {
	// TODO Auto-generated method stub
	arg0.writeString(mName);
	arg0.writeInt(mAge);
	arg0.writeString(mEmail);
}

//Parcelable 객체로 구현하기 위한 Parcelable Method ArrayList구현 등..
public  static final Parcelable.Creator<userinfo> CREATOR
		= new Parcelable.Creator<userinfo>() {

	@Override
	public UserInfo createFromParcel(Parcel source) {
		// TODO Auto-generated method stub
		return new UserInfo(source);
	}

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


결과 화면

 메인 화면에서 이름, 나이, 이메일을 입력받고 전송 버튼을 통해 Parcelable 데이터로 저장하고, Intent를 통해 전송합니다.


두 번째 화면에서 Intent를 통해서 해당 데이터를 받고, Parcelable에서 해당 실제데이터를 불러와 화면에 뿌려줍니다.


예제 파일 다운로드

  http://db.tt/KG27DxOD


마무리

 간단히 Parcelable를 구현해보았습니다. ArrayList를 통해서 구현할 수 있는 예제도 있으니 찾아보시면 좋을 듯 합니다.^^;





댓글