Android: отправка объекта из одного действия в другое действие

Чтобы отправить намерение с любым объектом из одного действия в другое, мы можем использовать Parcelable Interface или Serializable Interface. В чем разница между двумя? Какой предпочтительнее использовать?

Более того, мы можем отправлять строковый, целочисленный тип объекта, не используя весь этот интерфейс. Как это возможно?


person dev_android    schedule 07.08.2012    source источник
comment
stackoverflow.com/a/5551155/726863   -  person Lalit Poptani    schedule 07.08.2012
comment
Спасибо всем за помощь. Может ли кто-нибудь дать ответ, мы можем отправить строку, целочисленный тип объекта без использования всего этого интерфейса. Как это возможно?   -  person dev_android    schedule 08.08.2012
comment
Вы можете отправлять базовые типы данных, используя сам Intent. Но когда дело доходит до передачи Custom Object, ArrayList of Object, то лучше использовать Parcelable.   -  person Lalit Poptani    schedule 08.08.2012


Ответы (4)


Сериализуемый Java: Сериализуемый исходит из стандартной Java и его гораздо проще реализовать, все, что вам нужно сделать, это реализовать интерфейс Serializable и добавить переопределение двух методов.

  private void writeObject(java.io.ObjectOutputStream out)
              throws IOException 
  private void readObject(java.io.ObjectInputStream in)
              throws IOException, ClassNotFoundException

Проблема с Serializable заключается в том, что он пытается надлежащим образом обрабатывать все на свете и использует много размышлений, чтобы определить сериализуемые типы. Таким образом, он становится мощным объектом

Androids Parcelable: файл Android Inter-Process Communication (AIPC), который сообщает Android, как следует маршалировать и демаршалировать ваш объект. намного быстрее.

person Mohammod Hossain    schedule 07.08.2012

Вы можете отправлять String, Integer и подобные типы данных, а также объекты классов, реализующих интерфейс Parcelable, следующим образом...

Intent intent = new Intent(CallingActivity.this, CalledActivity.class);
intent.putExtra("IntegerExtra", intValue);
intent.putExtra("StringExtra", stringValue);
intent.putExtra("ParcExtra", parcObject);
startActivity(intent);

И на принимающей стороне вы можете написать следующий код:

intValue = getIntent().getIntExtra("IntegerExtra", 0);
stringValue = getIntent().getStringExtra("StringExtra");    
parcObject = ((YourParcalabeDataType) getIntent().getParcelableExtra("ParcExtra"));

Надеюсь, это решит вашу проблему... :)

person Midhu    schedule 07.08.2012
comment
Midhu dev_android не спрашивал о реализации, он просто спрашивал о различиях и о том, какой из них предпочтительнее. Пожалуйста, внимательно прочитайте вопрос. - person rajpara; 07.08.2012
comment
@AndroidCoader Я очень внимательно прочитал вопрос и обнаружил, что в последних строках говорится: «Более того, мы можем отправлять строку, целочисленный тип объекта, не используя весь этот интерфейс. Как это возможно? Для Моего Понимания это что-то вроде просьбы о реализации. Вот почему я ответил на этот вопрос так. - person Midhu; 07.08.2012
comment
dev_android удивляется тому, что строка, целочисленный тип объекта не использует весь этот интерфейс, даже если мы можем отправлять эти данные, как это возможно - насколько я понимаю :) Несмотря на то, что хорошие усилия для того, чтобы направлять допрашиваемого, продолжайте в том же духе, мое намерение было не деморализовать. - person rajpara; 07.08.2012

Вместо отправки объекта может быть проще просто отправить URI, указывающий на ваш контент. Это упростило бы отправку и избавило бы от необходимости отправлять объект, поскольку URI в идеале указывал бы на интересующий вас контент. Конечно, это зависит от контента, который вы пытаетесь передать.

person JoxTraex    schedule 07.08.2012

Вы можете найти разницу между интерфейсом Parcelable и Serializable по этой ссылке . В основном Parcelable создан для Android и намного эффективнее, чем Serializable.

Вы можете просто отправить строку или целое число, используя Bundles и связав эти пакеты с намерениями.

Intent i = new Intent(getApplicationContext(),YourClass.class);
Bundle b = new Bundle();
b.putString("string", "string");
i.putExtras(b);
startActivity(i);
person denizt    schedule 07.08.2012