2017-06-01 235 views
0

我通過藍牙發送字符串「A:22.656565,76.545454#」。但是在接收時間只需要「」,然後將剩餘的字符串即「A:22.656565,76.545454# 「我不知道爲什麼會發生這種情況?任何幫助,將不勝感激。這裏是我的代碼::Android藍牙輸入流接收不完整的數據

private class ConnectedThread extends Thread { 
    private final BluetoothSocket mmSocket; 
    private final InputStream mmInStream; 
    private final OutputStream mmOutStream; 

    public ConnectedThread(BluetoothSocket socket, String socketType) { 
     //Log.d(TAG, "create ConnectedThread: " + socketType); 
     mmSocket = socket; 
     InputStream tmpIn = null; 
     OutputStream tmpOut = null; 

     try { 
      tmpIn = socket.getInputStream(); 
      tmpOut = socket.getOutputStream(); 
     } catch (IOException e) { 
      //Log.e(TAG, "temp sockets not created", e); 
     } 

     mmInStream = tmpIn; 
     mmOutStream = tmpOut; 
     mState = STATE_CONNECTED; 
    } 

    String received="" ; 
    public void run() { 
     //Log.i(TAG, "BEGIN mConnectedThread"); 
     byte[] buffer = new byte[1024]; 
     int bytes; 
     while (mState == STATE_CONNECTED) { 
      try { 
       bytes = mmInStream.read(buffer); 
       received += new String(buffer, "UTF8"); 
       received = received.replaceAll("\\p{C}", ""); 
       if (received.contains("*")) { 
        received = received.substring(0, received.indexOf("*")); 
        Log.e("FOUND", ": " + received); 
        mHandler.obtainMessage(MESSAGE_READ, bytes, -1, received).sendToTarget(); 
        received = ""; 
        buffer = new byte[1024]; 
       } 
      } catch (IOException e) { 
       //Log.e(TAG, "disconnected", e); 
       connectionLost(); 
       break; 
      } 
     } 

    } 
    public void write(byte[] buffer) { 
     try { 
      //Log.d("Filter","Sending Data inside write3"); 
      mmOutStream.write(buffer); 
      Log.e("FOUND456", ": " + buffer); 
      mHandler.obtainMessage(MESSAGE_WRITE, -1, -1, buffer).sendToTarget(); 
     } catch (IOException e) { 
      //Log.e(TAG, "Exception during write", e); 
     } 
    } 

    public void cancel() { 
     try { 
      mmSocket.close(); 
     } catch (IOException e) { 
      //Log.e(TAG, "close() of connect socket failed", e); 
     } 
    } 
} 
+0

發佈完整的代碼 –

回答

0

聽起來像接收數據有一個小的延遲,這並不罕見。您應該在收到完整數據或超時時從循環中讀取輸入流中的數據。