Android Intent putExtra(String, Serializable)
Извините, если на этот вопрос уже дан ответ, я много искал, но не смог найти ни одного вопроса с моей проблемой.
Я пишу приложение для Android, которое получает данные из интернет-базы данных. Мое первое действие извлекает данные из базы данных, и я пытаюсь передать ссылку на всю базу данных другому действию.
это кратко выглядит так:
//server is wrapper class for my database connection/ data retrieving
Server server = new Server(...connection data...);
server.connect();
server.filldata();
И после этого я пытаюсь передать это другому занятию
Intent intent = new Intent(this, OtherActivity.class);
intent.putExtra("server", server); //server, and all implements Serializable
startActivity(intent);
И после этого я получаю исключение java.lang.reflect.InvocationTargetException без объяснения, в чем может быть проблема.
Пожалуйста, если вы знаете способ передачи объекта (кроме int, string...) в другое действие, помогите мне!
2 ответа
Твой класс Server
должен реализовать интерфейс Parcelable
для того, чтобы его объект был передан через связку.
Смотрите пример ниже, который доступен здесь:
public class MyParcelable implements Parcelable {
private int mData;
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel out, int flags) {
out.writeInt(mData);
}
public static final Parcelable.Creator<MyParcelable> CREATOR
= new Parcelable.Creator<MyParcelable>() {
public MyParcelable createFromParcel(Parcel in) {
return new MyParcelable(in);
}
public MyParcelable[] newArray(int size) {
return new MyParcelable[size];
}
};
private MyParcelable(Parcel in) {
mData = in.readInt();
}
}
Для любого объекта, который должен быть передан через Bundle, должен быть реализован интерфейс Parcelable или Seralizable.Intent предоставляет оба интерфейса:
putExtra(String name, Parcelable value)
putExtra(String name, Serializable value)
https://developer.android.com/reference/android/content/Intent.html
Но желательно использовать Parcelable, так как он написан специально для Android и имеет легкий характер.