1

この質問にすでに回答されている場合は申し訳ありませんが、たくさん検索しましたが、問題のある質問は見つかりませんでした。

私はインターネットデータベースからデータを取得する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 ...を除く)を別のアクティビティに渡す方法を知っている場合は、助けてください!

4

2 に答える 2

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();
     }
 }
于 2012-04-10T19:50:44.103 に答える
0

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専用に作成されており、本質的に軽量であるため、Parcelableを使用することをお勧めします。

于 2017-06-09T07:02:52.513 に答える