2

我正在为 Arduino 和 Android 之间的通信编写 Android 软件。

Arduino 使用serial.println- 我发送文本“它有效!”发送数据。

Android以这种方式接收数据:

bytes = mmInStream.read(buffer);
mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer).sendToTarget();

它显示一些代码而不是“它有效!”,更准确地说它显示[B@40e3f9b8.

原因是什么?如何解决这个问题?

4

2 回答 2

3

您刚刚尝试打印一个字节数组。在 Java 中,这只是打印出 object 的类型[B,然后是它的 address @40e3f9b8

如果要打印文本,请使用new String(bytes)从字节数组中获取字符串(使用默认字符集),然后打印字符串。

于 2012-10-03T17:00:21.533 回答
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 和源代码的完整示例程序

于 2012-10-04T05:26:26.340 回答