2014-06-19 59 views
2

我正在開發一個通過藍牙與微控制器進行通信的應用程序。我發送一個由成功接收的字節數組組成的數據包。但是,微控制器發送的字節數組沒有被我接收。沒有錯誤出現。接收代碼如下:通過藍牙與微控制器進行Android通信

private void beginListenForData() { 
    // TODO Auto-generated method stub 
    Log.e("clientsocket", "listening data"); 
    final Handler handler = new Handler(); 
    final byte delimiter = 10; // This is the ASCII code for a newline 
           // character 

    stopWorker = false; 
    readBufferPosition = 0; 
    readBuffer = new byte[1024]; 
    workerThread = new Thread(new Runnable() { 
     public void run() { 
      while (!Thread.currentThread().isInterrupted() && !stopWorker) { 
       try { 
        int bytesAvailable = mmInputStream.available(); 

        if (bytesAvailable > 0) { 
         Log.e("bytes", "" + bytesAvailable); 

         Log.e("bytes", "" + bytesAvailable); 
         byte[] packetBytes = new byte[bytesAvailable]; 
         Log.v("packet Bytes", "" + packetBytes); 
         for (int m = 0; m < packetBytes.length; m++) 
          Log.e("checking array", "" + packetBytes[m]); 
         Log.v("packet bytes len", "" + packetBytes.length); 
         mmInputStream.readFully(packetBytes, 0, 
           packetBytes.length); 

         for (int i = 0; i < bytesAvailable; i++) { 
          byte b = packetBytes[i]; 
          if (b == delimiter) { 
           byte[] encodedBytes = new byte[readBufferPosition]; 
           System.arraycopy(readBuffer, 0, 
             encodedBytes, 0, 
             encodedBytes.length); 
           for (int k = 0; k < encodedBytes.length; k++) 
            Log.v("encoded bytes", "" 
              + encodedBytes[k]); 

           int[] iarray = new int[encodedBytes.length - 1]; 
           int k = 0; 
           for (int j = 0; j < encodedBytes.length - 1; j++) 
            iarray[k++] = encodedBytes[j] & 0xff; 
           StringBuilder sb = new StringBuilder(
             iarray.length); 
           for (int l : iarray) 
            sb.append(l); 
           for (k = 0; k < iarray.length; k++) 
            Log.v("iarray", "" + iarray[k]); 

           final String data = sb.toString(); 
           // final String data = new String(
           // encodedBytes, "UTF-8"); 

           Log.e("data server", data); 

           readBufferPosition = 0; 
           Log.e("clientserver", "" + data); 
           handler.post(new Runnable() { 
            public void run() { 

             myLabel.append("\n" + data); 

             System.gc(); 
             Log.e("clientserver", "" + data); 
            } 
           }); 
          } else { 

           readBuffer[readBufferPosition++] = b; 

          } 
         } 
        } 
       } catch (IOException ex) { 

        stopWorker = true; 
        myLabel.append("\n" + "Try Again!"); 

       } 
      } 
     } 
    }); 

    workerThread.start(); 

} 

最初,當微控制器在字符串發送數據時,它被通過我成功讀取。但是當它打開到字節數組時,問題就開始了。有人可以幫助我嗎? 謝謝:)

+0

你可以發佈你的logcat嗎? – Gattsu

+1

你的傳輸碼是什麼? –

+0

解決了問題! 這是因爲分隔符在兩端不匹配。感謝你的關心。 :) – Prat

回答

0

解決了問題!這是因爲分隔符在兩端不匹配。感謝你的關心。 :)