2012-03-19 19 views
1

JavaサーバーがAndroidアプリケーションからCanvasオブジェクトを受信して​​います。このオブジェクトを他のアプリケーションに送信しようとしています。サーバーにオブジェクトが何を含んでいるかの知識がなくても、オブジェクトを格納せずに単に転送することは可能ですか?あなたがそれを行うことができなくなりますのでJava転送オブジェクト

おかげ

+0

umm ... 'RequestDispatcher#forward(request、response)'はあなたのニーズに合っていませんか? – Nishant

+1

ソケットを介してオブジェクトを送信することを意味する場合、[シリアル化]できない限り動作しません(http://en.wikipedia.org/wiki/Serialization#Java)。 Androidはipcを実行するときに[parcelable](http://developer.android.com/reference/android/os/Parcelable.html)を内部的に使用します – zapl

答えて

2

キャンバスは、直列化可能ではありません。

http://developer.android.com/reference/android/graphics/Canvas.html

独自の直列化スキームを記述する場合でも、あなたは、キャプチャすることができませんキャンバスオブジェクト内のプライベートな状態があります。

あなたが利用できる他のデータ構造について考える必要があります。例えば、ビットマップを符号化してストリームに書き込むことができ、従ってネットワークを介して転送することができる。ここ

は、ビットマップにキャンバスを保存語るポストだし、それからJPGに、保存せずに転送するよう

Image on canvas to JPEG file

、あなたがメモリに好き保存することができますそれは問題ではありません。サーバーの負荷について考える必要があります。あなたがメモリ内にたくさんの画像データを持っている状況に遭遇した場合。それはあなたのサーバー上のリソースを使い果たします。

他のアプリに送信する場合は、C2DMプッシュメッセージを「サーバー上に何かあります、来てください」というターゲットデバイス/アプリに送信する必要があります。たとえば、1つのアプリケーションがサーバーにデータを置くと、そこにIDがあります。 C2DMにはこのIDが含まれているため、ターゲットアプリはそのIDでGETして関連する画像を取得します。 C2DMプッシュがすべてのターゲットデバイスに到達するかどうか、またはC2DMプッシュがすべてのターゲットデバイスに到達するかどうかは保証されていないため、イメージデータは無期限にメモリに滞留することに注意してください。一時的な場合にのみ永続ストア(データベースやファイルシステムなど)にデータを書き込むことは意味があります。

+0

この場合、パスとペイントの両方を含むオブジェクトを送信することは可能ですが、それをもう一方の端のキャンバスに描画するのに使用できますか? –

+0

パスもペイントもシリアル化できません。私はあなたのアプリを知らないので、あなたが相手側に必要なものを復元するためにキャプチャする必要があるものを見なければなりません。パスとペイントは直列化可能ではありませんが、ゲッターから必要なものを得ることができれば、シリアル化可能な独自の「転送」オブジェクトを構築し、必要なものを他の側で再構築することができます。 –

関連する問題