1. read와 write 순서를 주의한다.
2. 멤버 변수로 boolean은 사용하지 않는다.
3. boolean은 byte또는 int로 변환해서 캐스팅 할수 있게 수정한다.
public class TestPacel implements Pacelable {
boolean _Example;
public boolean is_Example(){
return _Example;
}
public void set_Example(boolean example){
_Example = example;
}
}
이것을 다음과 같이 변형한다.
public class TestPacel implements Pacelable {
byte _Example;
public boolean is_Example(){
if ( _Example == 0 ) {
return false;
}
return true;
}
public void set_Example(boolean example){
if ( example == false ) {
_Example = 0;
}else{
_Example = 1;
}
}
}
4. Message의 setData에 Parcel을 추가 하지 않는다.
Message msg = new Message();
msg.what = CMD_TEST
Bundle data = new Bundle();
data.putParcel("xxxx",yyyyy);
msg.setData(data);
Intent targetIntent = new Intent( blahblah_receiver);
targetIntent.putExtra("EXTRA_MSG",msg);
sendBroadcast(targetIntent);
이렇게 데이터 전달을 하게 되면 받는 곳에서 마샬링 에러가 뜬다.
(android 1.6까지 해당)
이렇게 바꾸면 문제 없다.
Message msg = new Message();
msg.what = CMD_TEST
Bundle data = new Bundle();
data.putParcel("xxxx",yyyyy);
Intent targetIntent = new Intent( blahblah_receiver);
targetIntent.putExtra("EXTRA_MSG",msg);
targetIntent.putExtra("EXTRA_DATA",data);
sendBroadcast(targetIntent);
리시버쪽에서는
public void onReceive(Context context, Intent intent) {
Message msg = intent.getParcelableExtra("EXTRA_MSG");
Bundle data = intent.getParcelableExtra("EXTRA_DATA");msg.setData(data);
process(msg);
}
요런식으로 처리 하면 된다.
댓글 없음:
댓글 쓰기