2010-12-28 5 views
2

향상된 Intent 클래스를 생성하려고합니다. (나는 DataIntent이라고 부릅니다.) Object 타입의 "payload"를 보유 할 수있는 능력을 부여합니다. Uri 님). DataIntent은 Android의 Intent 클래스를 확장합니다.Intent 클래스 확장 중 ... received ClassCastException

Activity은 문제없이 확장 된 개체를 만들고 startActivityForResult()의 호출은 문제없이 작동합니다. 그러나, Activity에서 getIntent() 메서드를 호출하고 DataIntent으로 캐스팅하려고하면 ClassCastException을 던질 것입니다.

나는 이것이 아마 아주 바보 같은 질문입니다 실현 - 사전에 1,000 appologies -하지만 난 DataIntent에 캐스팅 할 수없는 이유는 새로운 Activity를 시작하는 데 사용 된 무엇 때문에 아는 사람 않으며, DataIntentIntent의 자식 ?

DataIntent dataIntent = (DataIntent)getIntent(); 
// invoked inside the responding Activity instance - throws a ClassCastException 
+1

왜 그렇게 했습니까? http://developer.android.com/reference/android/content/Intent.html#putExtra(java.lang.String, android.os.Parcelable)을 알고 계신가요? –

+0

Parcelable 인터페이스에서 멀리 떨어져 있기를 원합니다. 간단히 말해서 객체에 대한 참조 (단순히 직렬화 프로세스를 통해 탈수/재수 화)를 할당하는 것과 비교하여 불필요하게 "무겁습니다". – BonanzaDriver

답변

4

죄송합니다. Intent에 데이터를 배치해야합니다. 인 텐트 오브젝트는 프로세스를 가로 질러 이동되므로 사용자가 가져온 인스턴스는 생성 한 인스턴스와 동일하지 않습니다.

+0

Ah. 좋습니다. 나는 어딘가에 문서화되어 있고 아직 그것을 보지 못했을 것이라고 확신한다. Google에서 해당 클래스를 final로 표시하면 확장하지 않으므로 도움이됩니다. 필자는 Parcelable 인터페이스의 사용을 피하기를 바랬지 만 이런 종류의 힘이 내 손안에 퍼졌습니다. 감사합니다 hackbod. – BonanzaDriver

+0

다른 방법으로 데이터를 전송할 수 있지만 다른 응용 프로그램으로 전송하려는 것처럼 들립니다. hackbod와 마찬가지로, 프로세스 경계를 ​​넘어 살아있는 객체를 전달할 수는 없습니다. – Falmarri

+0

사실 아니요. 난 단지 같은 애플 리케이션 내에서 보낼 필요가 있지만 아키텍처는 분명히 내받은 활동이 다른 프로세스에있을 수 있도록 구현되어 있으므로 원래의 의도 참조가 더 이상 유효하지 않습니다, 왜 내가 받고 있었는지 이해가 되네요 ClassCastException – BonanzaDriver

1

나는 CirrusFlyer와 같은 것을했다. 또한 구현하기 전에 최종 키워드를 찾았습니다. Google은 인 텐트 클래스를 최종으로 표시해야합니다.