我正在为Android编写软件,用于Arduino和Android之间的通信。
Arduino使用serial.println
发送数据 - 我发送文字“It works!”。
Android正在以这种方式接收数据:
bytes = mmInStream.read(buffer);
mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer).sendToTarget();
它会显示一些代码,而不是“它的工作原理!”,更确切地说它会显示[B@40e3f9b8
。
是什么原因以及如何解决这个问题?
答案 0 :(得分:3)
您刚刚尝试打印字节数组。在Java中,它只打印出对象[B
的类型,然后是地址@40e3f9b8
。
如果要打印文本,请使用new String(bytes)
从bytearray中获取字符串(使用默认字符集),然后打印出字符串。
答案 1 :(得分:1)
您必须从字节数组创建一个字符串: String strIncom = new String(buffer,0,msg.arg1); \ r \ n处理程序的完整示例:
h = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case RECIEVE_MESSAGE: // if receive massage
byte[] readBuf = (byte[]) msg.obj;
String strIncom = new String(readBuf, 0, msg.arg1); // create string from bytes array
sb.append(strIncom); // append string
int endOfLineIndex = sb.indexOf("\r\n"); // determine the end-of-line
if (endOfLineIndex > 0) { // if end-of-line,
String sbprint = sb.substring(0, endOfLineIndex); // extract string
sb.delete(0, sb.length()); // and clear
txtArduino.setText("Data from Arduino: " + sbprint); // update TextView
}
//Log.d(TAG, "...String:"+ sb.toString() + "Byte:" + msg.arg1 + "...");
break;
}
};
};
使用apk和来源here
查看完整的示例程序