Categories: Android

[안드로이드] Intent에 Class 데이터를 넣는 방법

 안드로이드 프로그래밍을 하다보면 Intent 를 많이 사용하게 됩니다. 그래서 Intent 를 통해 데이터를 넘겨야 하는 경우도 많이 생기는데요. 데이터가 단순히 String이나 int라면 걱정이 없습니다. 그러나 Class 변수인 데이터를 넘겨야 하는 경우도 생기게 됩니다. 그럴 때 여기서 설명드릴 방법을 사용 할 수 있습니다.

1. 넘기고자 하는 Class에 implements Parcelable 를 추가한다.


ex) public class Info implements Parcelable


2. public Info(Parcel src) 생성자를 구현한다.


구현은 mID = src.readInt(); 와 같은 방식으로 src로 들어온 데이터를 클레스 변수에 채워 넣어줘야 합니다. Info Class안에 Class변수가 있다면 다음과 같이 ClassLoader을 사용해서 데이터를 넣어줍니다.
ex) mTime = Date.class.cast(src.readValue(Date.class.getClassLoader()));
     mID = src.readInt();


3. public void writeToParcel(Parcel arg0, int arg1) 함수를 구현 합니다.


여기서는 arg0에 넘길 데이터를 write 해줘야 합니다. 2번과 같이 예를 들면 arg0.writeInt(mID); 이렇게 사용하면 됩니다. Class변수인 경우에는 arg0.writeValue(mTime); 과 같이 해주면 됩니다.
ex) arg0.writeValue(mTime);
      arg0.writeInt(mID);


4. 아래와 같은 코드를 추가합니다.



 public static final Parcelable.Creator<Info> CREATOR =
  new Parcelable.Creator<Info>()
 {
  public InfocreateFromParcel(Parcel source) {
   return new Info(source);
  }


  public Info[] newArray(int size) {
   return new Info[size];
  }
 };



 Info 부분은 원하시는 ClassName으로 수정하시면 됩니다.
 
 위와 같이 코딩을 다 했다면 intent.putExtra(“Info”, mInfo); 와 같이 Class 변수를 넣더라도 데이터 전송이 정상적으로 성공할 것입니다.

5. 데이터를 받는 쪽에서는 mInfo = intent.getParcelableExtra(“Info”); 와 같이 받으면 됩니다. 만약에 ArrayClass<Class>를 받게 된다면 mInfoList = intent.getParcelableArrayListExtra(“InfoList”); 와 같이 받으면 됩니다.

dingpong

Share
Published by
dingpong

Recent Posts

LFS error at git checkout in Jenkins

Problem stdout: stderr: Downloading xxxx.a (83 MB) error: git-lfs smudge -- 'xxxx.a' died of signal…

3년 ago

플레이모빌 크리스마스 XXL 6629 산타 해외직구 구매가 배송비

https://www.playmobil.de/playmobil-xxl-weihnachtsmann/6629.html 구매가 : 48.49 유로 (플레이모빌 독일 홈페이지) 결제하는데 안되서 PayPal 로 결제하니 잘 잔행…

3년 ago

코카콜라 제로 355ml 72캔 구매가 (캔당 453원)

롯데온에서 355ml 24캔 롯데카드로 구매시 13,210원 https://www.lotteon.com/p/product/PD36294 APP으로 35,000원 이상 구매시 7,000 포인트 적립 행사…

4년 ago

경동나비엔 온수매트 EQM541-QS (퀸사이즈) 구입가

구입 매장 : 현대 홈쇼핑 (홈쇼핑 방송 중) 모바일 앱 http://www.hyundaihmall.com/front/pda/itemPtc.do?slitmCd=2114353981 최종 결제 가격 :…

4년 ago

PostMessage에 shared_ptr과 같은 스마트 포인터 넣기

PostMessage의 WPARAM 이나 LPARAM 으로 shared_ptr 와 같은 스마트 포인터 객체를 넘기고 싶은 경우가 있습니다.…

4년 ago

RC2255 – named STRINGTABLEs are not allowed

Visual Studio 에서 작업 중 이러한 컴파일 에러가 발생한 케이스가 있었습니다. 이 경우에는 .rc 파일에…

4년 ago