Android Parcelable и Serializable - PullRequest
       61

Android Parcelable и Serializable

30 голосов
/ 17 февраля 2012

Так что я знаю, что рекомендуется использовать Parcelable вместо Serializable в Android, потому что это быстрее.

Мой вопрос: нельзя ли избежать использования Serializable, верно?

Если у меня есть пользовательский объект, который я хочу сериализовать, скажем, у меня есть следующее определение класса

public class Person {
   String name;
   int Age;
   ...
   ....
}

Сделать этот parcelable легко, потому что класс Person содержит типы, которые поддерживает parcel.write * (), т.е. есть parcel.writeString и parcel.writeInt

Теперь, что если класс Person имеет следующий вид:

public class PersonTwo {
   MyCustomObj customObj;
   String name;
   int Age;
   ...
   ....
}

Как я полагаю, что нужно отправить объект MyCustomObj ?? Кажется, мне нужно снова использовать сериализуемый? но опять же, я подумал, что МЕДЛЕННО использовать сериализуемый, и, похоже, у нас нет другого выбора, кроме как использовать его в этом случае.

Я не понимаю

Может кто-нибудь сказать мне, как я бы посылал PersonTwo в этом случае?

Ответы [ 4 ]

16 голосов
/ 17 февраля 2012

Ссылка, предоставленная Аджаем, является именно тем, что вы ищете, как вы можете это сделать. Ну, что вы можете сделать, это реализовать Parcelable для вашего CustomObject1 и создать для него класс Parcelable, а затем вы можете использовать этот класс Parcelable для Parcel внутри другого класса Parcelable, который будет CustomObjects.

public class CustomObject1 implements Parcelable {

   // parcelable code CustomObject1
}

public class CustomObject2 implements Parcelable {

    private CustomObject1 obj1;

   // add  CustomObject1 here with getter setter
   // parcelable code for CustomObject2 

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeParcelable(obj1, flags);
    }  
    private void readFromParcel(Parcel in) {
        obj1 = in.readParcelable(CustomObject1.class.getClassLoader());
    }
  ............
}
2 голосов
/ 17 февраля 2012

Вам нужно сделать MyCustomObj разборным.

0 голосов
/ 09 июня 2017

Все составные объекты также должны быть Parcelable.В случае, если вы хотите пропустить объект, не используйте его метод writeToParcel.

0 голосов
/ 24 февраля 2014

Я пришел к тому, что Parcelable - проблема для меня.На Android 4.3 я получаю исключительное исключение при передаче данных между Деятельностями как Parcelable.Работает нормально на Android 4.0, 4.2 или 4.4.Он должен работать при изменении на Serializable, хотя он и медленнее.

...