2017-06-01 243 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

听起来像接收数据有一个小的延迟,这并不罕见。您应该在收到完整数据或超时时从循环中读取输入流中的数据。