2011-10-26 10 views
0

ログインしたユーザーの履歴を保持するログオンアクティビティを実装する必要があります。各ユーザーには、イメージ(ビットマップ)も添付されています。ユーザーが正常にログオンすると、ローカルストレージに保存されているユーザー履歴を更新する必要があります。ビットマップを含むユーザーのArrayListをシリアル化

ビットマップのため、私はユーザーを含むarraylistをシリアル化できません。ここで

は、ユーザークラスのコードです:

public class User implements Serializable 
{ 
private String username; 
private String systemUserID; 
private Date loginDate; 
private Bitmap image; 

どのように私は、ユーザーのArrayListのを保存することができるようにArrayListのシリアル化を実装することができますか?私はウェブ全体を圧縮し、ビットマップをバイト配列に変換するヒントを見つけました。

これはどのように機能しますか?

ありがとうございました!

答えて

0

Serializableインターフェイスを使用する前に、常に大きな休止を取る必要があります。それを使用すると、戻って来て、お尻にあなたをかまえる大きな可能性があります。しかし、私は逃げる。ビットマップはシリアライズ可能ではありません。それでも、あなたの問題にはまだまだ良い解決策があります。各ユーザーオブジェクトをシリアル化する代わりに、SQLiteデータベース内のすべての情報を追跡するだけです。そして、ビットマップに行く限り、それをSDCardに格納すれば、データベースにファイルパスが保存されます。 SQLiteデータベースは、一般的にアンドロイドで永続的なストレージをどのように行うのですか。

0

私はこの特定のタイプのロジックを実装していませんが、ここでおおまかに行う必要があります。

  1. 一部のシリアライズドキュメントをお読みください。たとえば、thisとなります。
  2. writeObject()/readObject()Userクラスに追加します。
  3. これらのメソッドの中では、copyPixelsToBuffercopyPixelsFromBufferを使用してNIO Bufferに保存/読み取りします。
  4. 必要に応じてBufferと出力/入力ストリームの間でデータを転送します。
0

ビットマップが直列化可能でない場合は、バイナリデータ(またはSTHより洗練された)としてその内容を書くように、(readObjectメソッドとwriteObjectメソッドを実装して)一時的なものとして、それをマークし、そのための独自のカスタムのシリアル化を提供する必要があります。

private void writeObject(ObjectOutputStream oos) throws IOException { 
     byte[] bitmapInBytes = convertToBytes(bitmap); 
     oos.defaultWriteObject(); 
     oos.writeObject(bitmapInBytes); 
} 

反対方向を確認できます。 (カスタム)シリアライゼーションは、あなたが書いたのと同じ順序でデータを読み込む必要があることを意味するFIFOオーダーによって行われます。