Android:AsyncTask byte []问题

时间:2013-04-28 18:15:07

标签: android android-asynctask

我正在使用asyncTask通过套接字将图像从Android发送到PC。

我这样称呼它

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 个答案:

答案 0 :(得分:3)

使用data[0]代替data...表示法只是给定类型数组的一些语法糖。所以int...实际上是一个int数组,你的byte...被视为byte []数组的数组,所以它实际上是byte[][]

答案 1 :(得分: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 [] ... data与byte [] [] data相同。

答案 2 :(得分:0)

您的字节数组(byte[])是一个维度参数,但BufferedOutputStream的参数byte[][])是二维数组。关于阵列的不同维度是一个非常大的问题。您必须将数组byte转换为二维数组。