Title: ClassCastException when using @Extra with Parcelable[] objects · Issue #1208 · androidannotations/androidannotations · GitHub
Open Graph Title: ClassCastException when using @Extra with Parcelable[] objects · Issue #1208 · androidannotations/androidannotations
X Title: ClassCastException when using @Extra with Parcelable[] objects · Issue #1208 · androidannotations/androidannotations
Description: Given I have a model class RemoteMediaFile, which is roughly defined like this: public class RemoteMediaFile implements Parcelable { private String mId; private String mParentId; public RemoteMediaFile() { } @Override public int describe...
Open Graph Description: Given I have a model class RemoteMediaFile, which is roughly defined like this: public class RemoteMediaFile implements Parcelable { private String mId; private String mParentId; public RemoteMedia...
X Description: Given I have a model class RemoteMediaFile, which is roughly defined like this: public class RemoteMediaFile implements Parcelable { private String mId; private String mParentId; public RemoteMedia...
Opengraph URL: https://github.com/androidannotations/androidannotations/issues/1208
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"ClassCastException when using @Extra with Parcelable[] objects","articleBody":"Given I have a model class `RemoteMediaFile`, which is roughly defined like this:\n\n``` java\npublic class RemoteMediaFile implements Parcelable {\n private String mId;\n private String mParentId;\n public RemoteMediaFile() {\n }\n\n @Override\n public int describeContents() {\n return 0;\n }\n\n @Override\n public void writeToParcel(Parcel dest, int flags) {\n dest.writeString(this.mId);\n dest.writeString(this.mParentId);\n }\n\n private RemoteMediaFile(Parcel in) {\n this.mId = in.readString();\n this.mParentId = in.readString();\n }\n\n public static final Creator\u003cRemoteMediaFile\u003e CREATOR = new Creator\u003cRemoteMediaFile\u003e() {\n public RemoteMediaFile createFromParcel(Parcel source) {\n return new RemoteMediaFile(source);\n }\n\n public RemoteMediaFile[] newArray(int size) {\n return new RemoteMediaFile[size];\n }\n };\n}\n```\n\nThen I'd like to use `@Extra` in my `Activity`, which should read the array from an Intent:\n\n``` java\n@EActivity\npublic class RemotePhotoDetailActivity extends BaseActivity implements RemotePlayer{\n @Extra\n protected RemoteMediaFile[] remoteFiles;\n}\n```\n\nHowever, this creates a ClassCastException:\n\n```\nCaused by: java.lang.ClassCastException: android.os.Parcelable[] cannot be cast to com.myapp.media.RemoteMediaFile[]\n at com.myapp.photos.RemotePhotoDetailActivity_.injectExtras_(RemotePhotoDetailActivity_.java:168)\n at com.myapp.photos.RemotePhotoDetailActivity_.init_(RemotePhotoDetailActivity_.java:109)\n at com.myapp.photos.RemotePhotoDetailActivity_.onCreate(RemotePhotoDetailActivity_.java:103)\n at android.app.Activity.performCreate(Activity.java:5231)\n at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)\n at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)\n at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)\n at android.app.ActivityThread.access$800(ActivityThread.java:135)\n at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)\n at android.os.Handler.dispatchMessage(Handler.java:102)\n at android.os.Looper.loop(Looper.java:136)\n at android.app.ActivityThread.main(ActivityThread.java:5001)\n at java.lang.reflect.Method.invokeNative(Native Method)\n at java.lang.reflect.Method.invoke(Method.java:515)\n at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)\n at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)\n at dalvik.system.NativeStart.main(Native Method)\n```\n\nThe generated code looks like this:\n\n``` java\n private void injectExtras_() {\n Bundle extras_ = getIntent().getExtras();\n if (extras_!= null) {\n if (extras_.containsKey(REMOTE_FILES_EXTRA)) {\n remoteFiles = ((RemoteMediaFile[]) extras_.getParcelableArray(REMOTE_FILES_EXTRA));\n }\n }\n }\n```\n\nA fix would be to read the `RemoteMediaFile[]` object from the intent like this:\n\n``` java\n private void injectExtras_() {\n Bundle extras_ = getIntent().getExtras();\n if (extras_!= null) {\n if (extras_.containsKey(REMOTE_FILES_EXTRA)) {\n Parcelable[] a = extras_.getParcelableArrayExtra(REMOTE_FILES_EXTRA);\n remoteFiles = Arrays.copyOf(a, a.length, RemoteMediaFile[].class);\n }\n }\n }\n```\n\nWhen I do this manually, it will work properly.\n\nMore details here: http://stackoverflow.com/a/10781119/375209\n","author":{"url":"https://github.com/ened","@type":"Person","name":"ened"},"datePublished":"2014-11-05T07:00:36.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":23},"url":"https://github.com/1208/androidannotations/issues/1208"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:416adccb-e582-825b-1eeb-31f8e657a856 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | 8122:2A2F96:3E3235:51B661:6A614E0C |
| html-safe-nonce | a233f96c5bee1db873dc72390f039078483774a5e6ffc70fc705707db030e99f |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI4MTIyOjJBMkY5NjozRTMyMzU6NTFCNjYxOjZBNjE0RTBDIiwidmlzaXRvcl9pZCI6IjY2NDE1MDE0MjQxNjEyMTM5NjQiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | 3151d3a152591badca7c93c31aa376e615c1629daab6d79cc7da3b3adbe40cc3 |
| hovercard-subject-tag | issue:47805895 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/androidannotations/androidannotations/1208/issue_layout |
| twitter:image | https://opengraph.githubassets.com/bbedeedda932103e9eb69c483b43678afbe1dac9d694897ab3eefd09f1026be7/androidannotations/androidannotations/issues/1208 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/bbedeedda932103e9eb69c483b43678afbe1dac9d694897ab3eefd09f1026be7/androidannotations/androidannotations/issues/1208 |
| og:image:alt | Given I have a model class RemoteMediaFile, which is roughly defined like this: public class RemoteMediaFile implements Parcelable { private String mId; private String mParentId; public RemoteMedia... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | ened |
| hostname | github.com |
| expected-hostname | github.com |
| None | 35b919fdb8e6752d2ed95a144e761ca5e924557563e2ed0a5ebf6c4430cdeeb6 |
| turbo-cache-control | no-preview |
| go-import | github.com/androidannotations/androidannotations git https://github.com/androidannotations/androidannotations.git |
| octolytics-dimension-user_id | 1315313 |
| octolytics-dimension-user_login | androidannotations |
| octolytics-dimension-repository_id | 3116751 |
| octolytics-dimension-repository_nwo | androidannotations/androidannotations |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 3116751 |
| octolytics-dimension-repository_network_root_nwo | androidannotations/androidannotations |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 1e22b08b60ccb67c3791f565bed248565260e611 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width