안드로이드 프로그래밍[JAVA Code]/Intent

Intent(bundle)를 통한 데이터 전달 : Serializable and Parcelable

훈츠 2019. 12. 4. 04:41
반응형

안드로이드 에서 서로다른 Activity 혹은 서버 같은 다른 영역으로 데이터를 보낼때, Intent 를 통해서 보내게 되는데 이때 원시데이터 (String, int , boolen etc) 를 제외하고 복합 데이터 타입 혹은 오브젝트를 보낼때는 데이터 직렬화를 해야한다. Serializable 같은 것은 데이터를 변환하고 보내는데 리소스를 많이 잡아 먹기 때문에 안드로이드에서는 안드로이드에 최적화 되어있는 Parcelable을 권장한다. 하지만 Parcelable은 구성하는데 조금 귀찮은 부분도 있으니, 경우에 따라 적용하면 될것 같다. 

1) 기본 ArrayList<String> 타입을 보낼때는 보낼때는 그냥 보내고 받을때만 getSerializableExtra 로 받으면 된다. 

<!-- 보내는 코드 -->
ArrayList<String> sData = new ArrayList<String>(  );
sData.add( "ArrayList Test1" );
sData.add( "ArrayList Test2" );
intent.putExtra(  "sData",sData );

startActivityForResult( intent,101 );
                
<!-- 받는 코드 -->
Intent intent = getIntent();
	if(intent != null) {
ArrayList<String> sData = (ArrayList<String>) intent.getSerializableExtra( "sData" );
	String data1 = sData.get( 0 );
	String data2 = sData.get( 1 );
	Toast.makeText( getApplicationContext(), data1, Toast.LENGTH_LONG ).show();
	Toast.makeText( getApplicationContext(), data2, Toast.LENGTH_LONG ).show();
}

                

1) Parcelable 이용할때 : 보낼 Class 정의 하면서 Parcelable 구현 하기. 

public class SimpleData implements Parcelable {
    int number;
    String message;

    public SimpleData(int number, String message) {
        this.number = number;
        this.message = message;
    }
    public SimpleData(Parcel src){
        number = src.readInt();
        message = src.readString();
    }

    public final static Parcelable.Creator CREATOR = new Parcelable.Creator(){
        @Override
        public SimpleData createFromParcel(Parcel source) {
            return new SimpleData(source);
        }

        @Override
        public SimpleData[] newArray(int size) {
            return new SimpleData[size];
        }
    };

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
            dest.writeInt( number );
            dest.writeString( message );
    }
}

2) Intent 이용해서 Pacelable 객체 보내기 받기 

 <!-- 보내는 코드 -->
 SimpleData data = new SimpleData( 1, "kyoung hoon world");
 intent.putExtra( "data",data );
 startActivityForResult( intent,101 );
 
 <!-- 받는 코드 -->
 Intent intent = getIntent();
 if(intent != null) {
 SimpleData data = (SimpleData) intent.getParcelableExtra( "data" );

if (data != null) {
textView.setText(String.valueOf( data.number )+ "\n" +data.message  );
Toast.makeText( getApplicationContext(), String.valueOf( data.number ) + 
						"\n" +data.message, Toast.LENGTH_LONG ).show();
	}
}

결론: Pacelable객체 미리 정의 해놓고 사용시 데이터만 추가하거나 변경해서 사용하면 됨. 

반응형