1

私はBluetooth経由で文字列としてxmlを受け取るアプリを開発しています(ArduinoとAndroid携帯から)。

Bluetoothから無効/不完全な文字列を取得しています。BluetoothはAndroidサービスとして定義されています。文字列を受け取るたびに、元の形式ではなく、arduinoまたは他のAndroid携帯から送信します。xml解析機能が機能していることを確認しました。

これが文字列を受け取っている私のコードです

mConnectedThread = new ConnectedThread(btSocket);
            mConnectedThread.start();

            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("\n");                          // determine the end-of-line
                        if (endOfLineIndex > 0) {                                           // if end-of-line,
                            String sbprint = sb.substring(0, endOfLineIndex);               // extract string
                            sendXML(sbprint); // this method is for sending the xml string
                            sb.delete(0, sb.length());                                      // and clear


                        }
                        Log.d(TAG, "...String:"+ sb.toString() +  "Byte:" + msg.arg1 + "...");
                        Log.d("IncString", strIncom);

                        break;

                    }
                };
            };

これが私が使用しているサンプルのxml文字列です

<head><hbt v='100'/><hrg v='75'/></head>

私は常に文字列を取得しますが、このように完全ではありませ**v='100'/><hrg v='75'****</head>**

質問が明確でない場合は、私が更新することを教えてください

よろしくお願いします

4

2 に答える 2

1

ここのコードで与えられた92行目のwhile(true)ステートメントのようなものを使用してみてください:http ://code.google.com/p/android-arduino/source/browse/garduino/android/src/net/morrildl/ garduino / CommThread.java

于 2013-02-24T16:21:06.903 に答える
1

私は次のコードでこれを成功させました...

byte[] buffer = new byte[128];  // buffer store for the stream
        int bytes; // bytes returned from read()

        // Keep listening to the InputStream until an exception occurs
        while (true) {
            try {


                bytes = mmInStream.read(buffer);
                byte[] readBuf = (byte[]) buffer;
                String strIncom = new String(readBuf, 0, bytes);  // create string from bytes array
                sb.append(strIncom);     // append string
                int endOfLineIndex = sb.indexOf("\r\n"); // determine the end-of-line
                if (endOfLineIndex > 0) {  
                    // add the current string to eol to a local string
                    String sbprint = sb.substring(0, endOfLineIndex);

                    // get the start and end indexes of the heading
                    int startHeading = sb.indexOf("HE");
                    int endHeading = sb.indexOf("/HE");

                    // set the heading
                    blahblah.setCurrentHeading(sb.substring((startHeading + 2), endHeading));

  ....

次に、arduinoから送信されたテキストから必要なすべての情報を取得した後、次のように呼び出しました。

sb.delete(0, sb.length());

私のadruinoからの文字列は次のようになります:::

void taskTransmitData(void)
{
  // start the xml
  Serial.print("HE");
  Serial.print(pMyMemory->currentHeading);
  Serial.print("/HE");

  .....

  Serial.println();

}

お役に立てれば...

于 2013-02-24T18:42:33.493 に答える