2013-03-14 7 views
0

Я пытаюсь использовать образец BlueToothChat Андроида, но есть что-то я не понимаю:GetBytes затем ToString не дают тот же результат каждый раз

byte[] send = message.getBytes(); 
Log.d("SEND_BYTE", send.toString()); 
mChatService.write(send); 

Здесь сообщение является строкой, которая затем преобразуется в байты, я думаю, для отправки. Но когда я проверяю журнал, часть send.toString() действительно коротка, даже если напечатанное сообщение длинное. Хуже того, если я набираю дважды одно и то же сообщение, у меня получается 2 разных журнала, что действительно странно. Вот что я получаю в журнале для сообщения hello, три раза подряд:

[[email protected] 
[[email protected] 
[[email protected] 

Там должно быть что-то (может быть, на самом деле просто) я не получил, но может (т выяснить, что это это Можете ли вы помочь мне с этим

Edit:.? Может быть полезно добавить следующее кода, поэтому здесь полный код:

byte[] send = message.getBytes(); 
Log.d("SEND_BYTE", send.toString()); 
mChatService.write(send); 

// Reset out string buffer to zero and clear the edit text field (buffer is used in the write function) 
mOutStringBuffer.setLength(0); 
mOutEditText.setText(mOutStringBuffer); 
+1

Метод ToString по умолчанию возвращает GetClass() GetName() + '@' + Integer.toHexString (хэш-код()) –

ответ

6

Да, вызов toString() в массиве байтов - плохая идея. Массивы не переопределяют toString(), поэтому вы получаете поведение по умолчанию Object.toString().

Чтобы изменить String.getBytes() вызов, вы хотите:

Log.d("SEND_BYTE", new String(send)); 

Или увидеть байты более непосредственно:

Log.d("SEND_BYTE", Arrays.toString(send)); 

Однако, я бы настоятельно рекомендуем вам не, чтобы сделать это непосредственно. Вместо этого вы должны указать кодировку при преобразовании в двоичный файл или из него, иначе он будет использовать кодировку по умолчанию для платформы. Какую кодировку ожидает ожидание чата? Например, если он ожидает UTF-8:

byte[] send = message.getBytes("UTF-8"); 
Log.d("SEND_BYTE", Arrays.toString(send)); 
mChatService.write(send); 
+0

Большое спасибо, ваше решение отлично работает – WhiskThimble

1

Вам нужно создать новый объект строки для получения фактической строки

String senddata=new String(send); 
1

Try:.

Log.d("SEND_BYTE", new String(send, "UTF-8");); 
Смежные вопросы