2011-11-15 11 views
0

私は何時間もこれを理解しようとしてきました。 私はこのメソッドに渡しているオブジェクトである 'ハッシュテーブル'をシリアル化しています 'saveDataToDisk(Object o)'、これを通常のJavaプロジェクトでテストし、 'toByteArray()'を正しく実行しました。 Androidでは、いつでもByteArray()にヒットするたびにキャッチに移動します...任意のアイデアですか?前もって感謝します。なぜ "toByteArray()"が実行されませんか?

public static byte[] saveDataToDisk(Object o) 
{ 
    // Storing the data into byte streams. 
    ByteArrayOutputStream bos = new ByteArrayOutputStream(); 

    try 
    { 
     ObjectOutputStream out = new ObjectOutputStream(bos); 
     out.writeObject(o); 
     out.close(); 
     // Get the bytes of the serialized object 
     byte[] buf = bos.toByteArray(); 

     return buf; 
    } 
    catch (IOException ioe) 
    { 
     return null; 
    } 
} 
+2

例外はありますか? – Robotnik

+0

例外はありません。私は 'ioe.printStackTrace()'を実行しようとするとNULLを返しますが、何も表示されません。私はこれを解決するように見えない場合、誰かがこれに代替を持っていますか? >:P –

+0

catch文の中にブレークポイントを置くと、ioe変数を検査できるはずです。上に置き、キャッチに当たるまでステップオーバーします。 編集:また、そこにいる間、あなたのbos変数のサイズを確認してください。データがある場合は> 0 – Robotnik

答えて

1

私はあなたのユースケースを実行しようとしましたが、私のために働くようです。 私はバイト配列を取得 以下のコードを参照してください:[-84、-19、0、5、116、0、2、72、105]

public class WriteObject extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main_1); 
    Button button1 = (Button) findViewById(R.id.button1); 
    button1.setOnClickListener(new OnClickListener(){ 
     String s = "Hi"; 
     @Override 
     public void onClick(View v) { 
      byte[] b = WriteObject.saveDataToDisk(s); 
      Log.i("", b.toString()); 

     } 

    }); 
} 
public static byte[] saveDataToDisk(Object o){ 
    ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
    byte[] buf = null; 
    try{ 
     ObjectOutputStream out = new ObjectOutputStream(bos); 
     out.writeObject(o); 
     out.close(); 
     buf = bos.toByteArray(); 
    }catch (IOException ioe){ 
     Log.e("", ioe.toString(),ioe); 
    } 
    return buf; 
} 

} 
+0

WOW ...答えは、 "try"ブロックの中にreturn文を置くことができません...私はそれを知りませんでした。 –

+0

@ ObjectiveC-InLearning、はい、できます。 – st0le

+0

は私のコードがうまくいかなかった理由を説明することができますが、私は 'return buf'を外に移動しましたか?あなたはおそらく正しいですが、私はちょうど興味があります。 –

0

Iはthis

ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
ObjectOutputStream oos = new ObjectOutputStream(bos); 
oos.writeObject(obj); 
oos.flush(); 
oos.close(); 
bos.close(); 
byte [] data = bos.toByteArray(); 
return data; 
を発見しました

だから、試してみてください.flush()

関連する問題