0

あるアクティビティから別のアクティビティにオブジェクトを送信しようとしているため、を使用しparcelableています。送信および受信するコードを作成している間 (このコードは下部にあります)、いくつかのコードが必要なようです。実際にオブジェクトをパーセルに書き込むことができます。

あるアクティビティから別のアクティビティにオブジェクトを渡す際のエラー (Parcelable を 使用writeToParcel) (でdest.writeValue(this);エラーが発生する場所ですが) StackOverFlowError は言います

私も必要かもしれないとpublic static final Parcelable.Creator思います...書き方が完全にはわかりませんが(大まかに書いてみましたが、コメントに少しあります)

また、次のようなビットが必要かどうかもわかりませんpublic Clubs (Parcel source)...

どんな助けでも大歓迎です。ありがとう

public class Clubs implements Parcelable{   
        public void setEvent(String eventType, String date) {
            this.eventType = eventType;
            this.date = date; 
        }

   //contains lots of defined variables and various methods that 
   //aren't relevant for my question and would take up lots of room
   //all like the one above.


        //public static final Parcelable.Creator CREATOR
        //= new Parcelable.Creator() {
        //    public Parcel createFromParcel(Parcel in) {
        //        return (in);
        //    }
        //};

        @Override
        public int describeContents() {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public void writeToParcel(Parcel dest, int flags) {
                  dest.writeValue(this);
        }

}

オブジェクトを区画に入れ、新しいアクティビティを開始する onItemClick クラス

public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
                Clubs mymeeting = db.get(map.get(position));
                Intent i = new Intent();
                Bundle b = new Bundle();
                b.putParcelable("mymeeting", mymeeting);
                i.putExtras(b);
                i.setClass(ListSample.this, DynamicEvents.class);
                startActivity(i);
            }

オブジェクトを正しく送信すると、後で編集される新しいアクティビティ コードの開始

public class DynamicEvents extends Activity
{
  protected void onCreate(Bundle savedInstanceState)
  {
      super.onCreate(savedInstanceState);
        Bundle b = getIntent().getExtras();
        // Create the text view
        TextView textView = new TextView(this);
        textView.setTextSize(20);
        textView.setText(" " + b.getParcelable("mymeeting").toString());

        // Set the text view as the activity layout
        setContentView(textView);
  } 
}  
4

1 に答える 1

0

writeToParcelメソッドを次のように書き換えます

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(eventType);
    dest.writeString(date);
}

カスタム Java オブジェクトを直接記述することは許可されていない場合があります。標準データ値を個別に記述するか、オブジェクトを作成してオブジェクトserializableのメソッドを使用writeSerializableParcelます。

于 2013-09-07T21:12:24.360 に答える