We deliberately don't support this kind of thing to keep the IPC protocol
simple.  You have basically two choices:

1. Use a concrete class type, which will result in ONLY that classes CREATOR
being used to unmarshall its data.  The protocol does no type inspection
here, since that would introduce a lot more overhead to a very common
operation.
2. Use a generic Parcelable class type, in which case the marshalling code
will inspect the class type, included that in the marshalled data, and use
that to re-construct it on the other side.

You can also do your trickery in the CREATOR to instantiate multiple types.
If you have actually overloaded a method, then yes you will call through to
the most derived class.  This is purely a Java thing, and it certainly does
work; this kind of thing is done in a few places in the system.

On Wed, Jul 15, 2009 at 7:11 AM, Bart van Wissen <bartvanwis...@gmail.com>wrote:

>
> I've run into the following issue:
>
> Say I have an Animal class, which is parcelable, and I have a Dog
> class and a Cat class, which are subclasses of Animal and also
> implement Parcelable.
>
> Say I have a service with the following AIDL interface:
>
> sendAnimals(List<Animal> animals);
>
> Now I'm calling this remote interface from some client application,
> passing it a List containing Cats and Dogs. What happens now is that
> android calls the Cat's and the Dog's writeToParcel() methods at the
> client side, but at the server side, the Animal's CREATOR is used,
> which calls Animal's readFromParcel() method.
> So the right data is sent from the client, but the wrong unmarshalling
> code is executed at the server.
>
>
> I have tried to put this in the AIDL file:
>
> sendAnimals(List<T extends Animal> animals);
>
> This results in a syntax error from the aidl compiler though.
>
> My current workaround is as follows:
> - In each specific Animal subtype's writeToParcel() method, I write
> the class name as a String into the Parcel as the first element.
> - In the Animal's CREATOR.createFromParcel() I read the first String
> out of the parcel, and based on that I create the appropriate type and
> call the appropriate readFromParcel() method.
>
> I think this is kind of ugly though. I would expect the android
> framework to take care of this for me.
>
> (My application is not actually dealing with animals, this is just to
> make it simpler to explain the issue)
> >
>


-- 
Dianne Hackborn
Android framework engineer
hack...@android.com

Note: please don't send private questions to me, as I don't have time to
provide private support, and so won't reply to such e-mails.  All such
questions should be posted on public forums, where I and others can see and
answer them.

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers-unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to