Android Intent putExtra(String,Serializable)

时间:2012-04-10 18:36:44

标签: android android-activity android-intent

如果这个问题已经得到解答,我很抱歉,我搜索了很多,但我找不到任何问题。

我正在编写一个从互联网数据库获取数据的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 个答案:

答案 0 :(得分:2)

您的班级Server应该实现接口Parcelable,以便通过捆绑包传输其对象。

请参阅下面的示例,该示例可用here

 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();
     }
 }

答案 1 :(得分:0)

对于需要通过Bundle传递的任何对象,必须实现 Parcelable Seralizable interface.Intent提供两个接口:

putExtra(String name, Parcelable value)
putExtra(String name, Serializable value)

https://developer.android.com/reference/android/content/Intent.html

但建议使用Parcelable,因为它是专门为Android编写的,本质上是轻量级的。