2013-04-28 85 views
1

我使用asyncTask通過套接字將圖像從Android發送到PC。Android:AsyncTask byte []問題

我打電話像這樣

new SendImage().execute(data); 

,其中數據類型byte[]

和我的代碼是

private class SendImage extends AsyncTask<byte[],Void, Void> { 

    @Override 
    protected Void doInBackground(byte[] ... data) { 

     try{ 


      final DataOutputStream dataOutputStream; 

      final BufferedOutputStream out = new BufferedOutputStream(RRAWsecurity.socket.getOutputStream()); 
      int count = data.length; 

      dataOutputStream = new DataOutputStream(RRAWsecurity.socket.getOutputStream()); 
      dataOutputStream.writeInt(count); 
      dataOutputStream.flush(); 

      out.write(data, 0, count); 

      out.flush(); 

     }catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 

     return null; 

} 
} 

問題是這一行

out.write(data, 0, count); 

錯誤說

The method write(byte[], int, int) in the type BufferedOutputStream is not applicable for the arguments (byte[][], int, int) 

我想不通爲什麼它要求2D陣列?

回答

3

使用data[0]而不是data。符號...只是給定類型數組的一些語法糖。所以int...實際上是一個整數的數組,你的byte...被當作一個byte []數組的數組,所以它實際上是byte[][]

+0

+1或以下是不同'doInBackground()s'的示例http://www.mcs.csueastbay.edu/~grewe/Book/Android/Source%20Code/Sockets/src/net/learn2develop/Sockets/ SocketsActivity.java – 2013-04-28 19:51:25

1

替換:

int count =data.length; to int count =data[0].length; 
out.write(data,0,count); to out.write(data[0],0,count); 

數據是字節[] []。 byte [] ...數據與byte [] []數據相同。

0

您的字節數組(byte[])是一個二維參數,但BufferedOutputStream的參數byte[][])是兩維數組。關於陣列的不同尺寸是一個很大的問題。您必須將您的數組byte轉換爲兩個二維數組。