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 и имеет легкий характер.

Другие вопросы по тегам