Android: AsyncTask byte []

54
5

Я использую asyncTask для отправки изображений через сокеты с Android на ПК.

Я называю это так

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 массив?

спросил(а) 2013-04-28T21:15:00+04:00 7 лет, 2 месяца назад
1
Решение
77

Используйте data[0] вместо data. Обозначение ... представляет собой лишь некоторый синтаксический сахар для массива данного типа. Таким образом, int... на самом деле представляет собой массив из int и ваш byte... рассматривается как массив массивов byte [], поэтому он фактически byte[][].

ответил(а) 2013-04-28T21:30:00+04:00 7 лет, 2 месяца назад
55

Заменить:

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

данные - это байт [] []. байт []... данные - такой же байт [] [] данные.

ответил(а) 2013-04-28T22:24:00+04:00 7 лет, 2 месяца назад
39

Ваш байтовый массив (byte[]) - один размерный параметр, но byte[][] BufferedOutputStream byte[][]) - это два размера массива. Различные размеры массива - очень большая проблема. Вы должны преобразовать byte массива в два массивных массива.

ответил(а) 2013-04-28T22:31:00+04:00 7 лет, 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема