У меня есть внешняя библиотека Java с множеством общих объектов (например, пользователь с именем, фамилией, адресом ...). То, что я хочу создать, является классом сериализатора (de), который преобразует все мои объекты в объекты Parcelable для отправки с помощью Intents. Проблема в том, что намерения Android не поддерживают putExtra (String, Parcel) или что-то подобное. У вас есть идея о том, как преодолеть это неудобство? На самом деле я помещаю все свои экземпляры в класс Application, но я думаю, что это грязный метод ... более чистый?Parcelable encoder/decoder (Внешний класс)
ответ
Вы можете использовать метод Intent putExtras(Bundle extras) и реализовать в своем методе класса exportToBundle()
, который возвращает Bundle со значениями этого объекта. Если вы не хотите создавать какие-либо другие методы в своем классе, вы можете создать другой класс утилиты со статическим методом, который преобразует объект вашего класса в Bundle. И если ваш класс Parcelable
, вы можете поместить его прямо в Bundle, используя метод putParcelable(String key, Parcelable value)
.
Вы можете прямо поставить класс Parcelable в цель, так что то, что вы ищете, поддерживается. Здесь есть слово предупреждения, и я думаю, что у вас уже есть эта концепция, упомянув сериализацию/де-сериализацию. Вы отправляете копию класса, который будет восстановлен классом, обрабатывающим намерение. The official android example is weak because only one integer is sent and we can do that already.
Пример Цель прохождение класса
Intent intent = new Intent(context, TheClassImCalling.class);
// use a constant that's public or an R string so both the sender
// and receiver are working on the same class
// the class you are sending goes into the putExtra method statement.
intent.putExtra(ImageTextListViewActivity.EXTRA_KMLSUMMARY,
mKmlSummary);
startActivity(intent);
Вы вытащить копию из класса с заявлением, как это, используя ту же константу вы использовали, чтобы отправить его.
KMLSummary mkmlSummary = intent.getExtras().getParcelable(
ImageTextListViewActivity.EXTRA_KMLSUMMARY);
Вот методы, которые должны быть реализованы
public class KmlSummary implements Parcelable {
// конструктор с Parcel в качестве аргумента. // Вы читаете и записываете значения в том же порядке.
public KmlSummary(Parcel in) {
this._id = in.readInt();
this._description = in.readString();
this._name = in.readString();
this.set_bounds(in.readDouble(), in.readDouble(), in.readDouble(),
in.readDouble());
this._resrawid = in.readInt();
this._resdrawableid = in.readInt();
this._pathstring = in.readString();
String s = in.readString();
this.set_isThumbCreated(Boolean.parseBoolean(s));
}
// Overridden methods for the Parseable interface.
@Override
public void writeToParcel(Parcel arg0, int arg1) {
arg0.writeInt(this._id);
arg0.writeString(this._description);
arg0.writeString(this._name);
arg0.writeDouble(this.get_bounds().southwest.latitude);
arg0.writeDouble(this.get_bounds().southwest.longitude);
arg0.writeDouble(this.get_bounds().northeast.latitude);
arg0.writeDouble(this.get_bounds().northeast.longitude);
arg0.writeInt(this._resrawid);
arg0.writeInt(this._resdrawableid);
arg0.writeString(this.get_pathstring());
String s = Boolean.toString(this.isThumbCreated());
arg0.writeString(s);
}
@Override
public int describeContents() {
//
return 0;
}
// Some glue to tell the OS how to create the class from the parcel
@SuppressWarnings("rawtypes")
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
public KmlSummary createFromParcel(Parcel in) {
return new KmlSummary(in);
}
public KmlSummary[] newArray(int size) {
return new KmlSummary[size];
}
};
}
Именно поэтому вы можете сериализовать класс в намерение и де-сериализовать класс из намерения.
Good Luck Danny117
- 1. класс, реализующий Parcelable
- 2. Сделать класс Parcelable error
- 3. Сохраните класс parcelable в файл
- 4. Как сделать внутренний класс Parcelable
- 5. Parcelable класс с элементом интерфейса переменной
- 6. Класс не найден при разборке: Parcelable (Android)
- 7. Как правильно использовать класс Parcelable в Android
- 8. Parcelable класс, возвращаемый родительской активности, равен нулю
- 9. Parceler - Невозможно найти генерироваться Parcelable класс
- 10. Parcelable issue
- 11. Включить внешний класс php
- 12. машинописи определяет внешний класс
- 13. NSTableView reloadData внешний класс
- 14. Класс исключения 'Внешний: SIGSEGV'
- 15. Как изменить внешний класс?
- 16. неразрешенный внешний символ «класс»
- 17. Внешний класс-вызов
- 18. Внутренний/Внешний класс obj.new
- 19. Метод Ajax внешний класс
- 20. Метод вызова Внешний класс
- 21. Wicket - инициализировать внешний класс
- 22. Реализовать Parcelable
- 23. Java Внешний класс расширяет статический внутренний класс
- 24. Java-внешний отдельный доступ класс анонимный класс
- 25. Внутренний класс и внешний класс в C#
- 26. андроид parcelable ссылки другой parcelable круговой зависимости
- 27. Android Parcelable использование
- 28. Android Parcelable Parcel HashMap
- 29. NotSerializableException на объекте Parcelable
- 30. Parcelable java.util.Date
Создать класс модели и поместить все соответствующие данные в нем и сделать его parcelable. По строке примечания по умолчанию сериализуем взглянем на класс строчки android – Triode
У меня только сериализатор Json (de), но эффективен ли он? Мне нравится иметь всегда чистые решения ... Проблема в том, что я получаю эти объекты над JSon, поэтому у меня есть User user = json.decode (string); Теперь я хочу посылить его ParcelableUser puser = (ParcelableUser) пользователь; Но теперь я не могу использовать эту кастинг из-за ограничений Java над линией подкласса. – Otacon
u сделайте этот пользовательский класс разумным, на Android, который называется чистым решением – Triode