2011-01-10 4 views
2

先日、小包としてインテントを使用してオブジェクトをアクティビティに送信することに関して質問がありましたが、私の状況でそれを行う方法はわかりません。私はObject x;オブジェクトの変数を持っています:x = edit.getText().toString();このインスタンスではxはStringオブジェクトになりますが、xをInteger型とSQLDate型の両方として設定することもできます。オブジェクトをパーセルとして送信する方法の例を見ると、カスタムデータ型の場合でもデータ型が何であるかを知っている必要があります。私はこれに完全に固執しているので、これに関する助けは大いに感謝されます。小包を使用して不明なデータ型のオブジェクトを送信するときの問題

フローは次のとおりです。

Object x; - 作成されます。

x = String object||Integer object||sqldate object - xが値を割り当てられ

i.putExtra("object", x); - X parceledされた後、次のアクティビティを介して送信されます。

答えて

2

あなたが旅館に渡すデータの要件は、何らかの方法でシリアライズ可能であり、はい、StringIntegerの両方です。また、java.sql.Dateを使用している場合、このタイプはutil.Dateを継承し、次にSerializableを継承します。わずかな「問題」は、Intent.putExtraにパラメータタイプとしてObjectがかかるオーバーロードがないことです。したがって、あなたが入れたいどのデータ型「知る」しなければならない:

if (goingToUseStringObject...) 
{ 
    // use the CharSequence overload 
    i.putExtra("object", stringObject); 
} 
else if (goingToUseIntegerObject...) 
{ 
    // use the int overload 
    i.putExtra("object", integerObject); 
} 
else if (goingToUseDateObject...) 
{ 
    // use the Serializable overload 
    i.putExtra("object", dateObject); 
} 
+0

私はかなりのオーバーヘッドがありますが、それは日付オブジェクトを文字列として送信し、次のアクティビティで再変換する価値があると思いますか?私はdd/MM/yyyyを保存する必要があるので、私は時間の部分を失うことについて騒ぎません。 – SamRowley

+0

@SamRowley - それが大きいかどうかわかりません。しかし、確かに、あなたが必要とするものだけをシリアライズすることは確かに最速の選択肢になります。しかし、すべてのパフォーマンスに関連する問題では、事前に最適化しないでください。テストに大きな違いがあることが示されたら、それに行きましょう。そうでない場合は、最も簡単なことをしてください。 –

+0

私の質問にお答えしていただきありがとうございます。 – SamRowley

1

よりもむしろ3他の異なるデータ型のいずれかになりますObject参照を持つ、私はラッパークラスを作成することをお勧めしたいですあなたのためにデータを格納するParcelableを実装しています。あなたがこのデータをたくさん回すと、あなたの人生ははるかに簡単になります。

関連する問題