이번 포스팅에서는 Bundle에 클래스 객체를 전달하는 방법에 대해 정리하겠다.
클래스 객체를 전달할 수 있다는 사실을 몰랐을 때에는
객체가 가지고있는 데이터 하나하나를 따로 저장하여 전달하다 보니
전달해야 하는 데이터가 많아져 곤란했었다.
클래스 객체를 전달하면 데이터 하나만 전달해도
받는 시점에 전달받은 데이터에서 값을 추출해서 사용할 수 있으니 훨씬 편리하다
방법은 쉽다.
/**수신*/
TestClass testClass;
testClass = (TestClass) bundle.getSerializable("TEST_CLASS_INSTANCE");
/**송신*/
Bundle bundle = new Bundle();
bundle.putSerializable("TEST_CLASS_INSTANCE", (Serializable) testClass);
송신할 때에는 bundle.putSerializable() 메소드를 통해 키 값과 함께 객체를 전달하면 된다.
객체 앞에 (Serializable)을 작성하여 직렬화 데이터로 캐스팅하고,
전달하려는 클래스에도 Serializable 인터페이스를 상속 받아야 한다.
수신 할 때에도 bundle.getSerializable()을 통해 키 값으로 해당 객체를 추출할 수 있다.
또한 메소드 앞에 해당 클래스로 캐스팅 해주어야 한다.
*추가로, 전달하려는 클래스 내부에 이너 클래스가 있다면,
이너 클래스에도 Serializable 인터페이스를 상속받아야 하며
생략할 경우에는 Runtime Exception이 발생할 수 있다.
java.lang.RuntimeException: Parcelable encountered IOException writing serializable object
*Serializable 상속 예시
import java.io.Serializable;
/**Class에 Serializable 상속*/
public class TestClass implements Serializable {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/**Inner Class에도 Serializable 상속*/
public class TestItem implements Serializable{
private int testNo;
public int getTestNo() {
return testNo;
}
public void setTestNo(int testNo) {
this.testNo = testNo;
}
}
}
*관련 내용은 아래 포스팅 참고
[JAVA][Android] 데이터 직렬화 (Serialize)
데이터 직렬화 (Serialize) *데이터 직렬화는 1. 객체를 저장하는 경우 2. 데이터를 DB에 올리는 경우 3. 파일을 작성하는 경우 4. 파싱할 데이터를 통신하는 경우 등 여러가지 케이스에 유의미
developer-jisu.tistory.com
'JAVA > Android' 카테고리의 다른 글
[JAVA][Android] GlideUrl을 통해 Url에 권한 부여하기 (0) | 2022.08.18 |
---|---|
[JAVA][Android] SpannableStringBuilder로 TextView의 일부에만 스타일 지정하기 (0) | 2022.08.05 |
[JAVA][Android] JSON / GSON / JACKSON (0) | 2022.07.21 |
[JAVA][Android] ActivityResultLauncher를 이용한 액티비티 간의 통신 (0) | 2022.07.20 |
[JAVA][Android] 데이터 직렬화 (Serialize) (0) | 2022.07.18 |