2

私はArduinoとAndroidの間の通信のためのAndroid用のソフトウェアを書いています。

Arduino は以下を使用してデータをserial.println送信します - 「It works!」というテキストを送信します。

Android は次の方法でデータを受信して​​います。

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

そして、「動作します!」の代わりにいくつかのコードを表示します。より正確には、[B@40e3f9b8.

その理由と、この問題を解決するにはどうすればよいですか?

4

2 に答える 2

3

バイト配列を印刷しようとしました。Java では、 object の type と[Bそれに続く addressを出力するだけ@40e3f9b8です。

テキストを出力したい場合は、 を使用new String(bytes)して bytearray から文字列を取得し (デフォルトの文字セットを使用)、文字列を出力します。

于 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 に答える