티스토리 뷰

액티비티간 원시적 데이터형식들 전달은 직설적입니다, boolean,strings,integers 등 어떤 형식이라도 넣고 intent.putExtra()를 사용하면 됩니다. 어쨌든 사용자 객체는 이 방법으로는 전달이 불가합니다.

액티비티/서비스들간 사용자정의 객체 전달을 위해서 우리는 사용자정의 클래스에 parcelable 또는 serializable interface를 implement 해야 합니다. 어쨌든 parcelable는 안드로이드를 위해 특별히 디자인되었고 최고의 실행속도를 위해 권고되고 있습니다.

간단한 클래스로 시작 해봅시다:

public class User {
    String UserName;
    String  Password;
    int Action;

    public User(String name,String pass,int ac){
        UserName=name;
        Password=pass;
        Action=ac;
    }
}

위는 3개의 private 필드들과 게터와 세터를 지닌 간단한 사용자 클래스 입니다.

우리는 액티비티/서비스들간에 이 클래스 객체를 전달할 수 없습니다. 그렇게 하기위해선 parcelable 클래스를 만들어야 합니다.

보시죠:

public class User implements Parcelable{
 
String UserName;
String  Password;
int Action;
 
public User(String name,String pass,int ac){
UserName=name;
Password=pass;
Action=ac;
}
 
//parcel part
public User(Parcel in){
String[] data= new String[3];
 
in.readStringArray(data);
this.UserName= data[0];
this.Password= data[1];
this.Action= Integer.parseInt(data[2]);
}
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
 
@Override
public void writeToParcel(Parcel dest, int flags) {
// TODO Auto-generated method stub
 
dest.writeStringArray(new String[]{this.UserName,this.Password,String.valueOf(this.Action)});
}
 
public static final Parcelable.Creator CREATOR= new Parcelable.Creator() {
 
@Override
public User createFromParcel(Parcel source) {
// TODO Auto-generated method stub
return new User(source);  //using parcelable constructor
}
 
@Override
public User[] newArray(int size) {
// TODO Auto-generated method stub
return new User[size];
}
};
 
}

변수 쓰고 읽는 순서는 중요함을 알아야합니다, 같은 순서로만 읽고 쓸수 있습니다. 하나 더 주의를 드리자면 CREATOR는 대문자( 제 하루를 날렸답니다 ㅠㅠ )로 써야 합니다.

이제 사용자 객체를 parcelableExtra로 넣어서 보내고 받을 수 있습니다.

보내는 액티비티 예제:

User obj= new User("sohail","1234",1);
 
Intent i=new Intent(this,receiverActivity.class);
 
i.putExtra("userTag",obj);
 
startActivity(i);

그리고 receiverActivity의 onCreate에서 getparcelableExtra로 객체를 수신합니다.

User uobj= getIntent().getParcelableExtra("userTag");

소스 탐색과 다운받기는 parcelableIntentServiceExample.

[원문] http://www.sohailaziz.com/2012/04/passing-custom-objects-between-android.html

'모바일 > Android' 카테고리의 다른 글

PHP - Android 간 암호화/복호화 (링크)  (0) 2012.07.25
안드로이드 Google Cloud Messaging (GCM) 연동 개발  (0) 2012.07.17
Android 라이브러리 프로젝트  (0) 2012.05.31
Layout (Link)  (0) 2012.05.26
custom ListView  (0) 2012.05.26
댓글