2014-04-26 13 views
0

我試圖構建發送有關數據的手勢用戶執行,到Java服務器,使用藍牙一個Android客戶端應用程序。 當用戶執行手勢時,應用程序將有關它的數據發送到PC。
例如(android client send) 5:-24:2(java server receive) 5:-24:2
只要手勢執行它們之間長範圍內,代碼工作正常。通過藍牙發送的數據多次輪番上漲,而新的數據繼續接收

問題是當應用程序非常快速地發送數據(因爲用戶執行滾動例如,所以onScroll(...)要求每個onTouchEvent(...))。
那麼一個特定的消息被卡住:

(android client send) 5:-24:2, (java server receive) 5:-24:2 (ok) 
(android client send) 5:-24:2, (java server receive) 5:-24:2 (ok) 
(android client send) 5:-24:2, (java server receive) 5:-24:25:-24:2 (message stuck) 
(android client send) 5:-24:2, (java server receive) 5:-24:25:-24:2 (message stuck) 
... 

Java服務器端讀取代碼:

private StreamConnection mConnection; 
public void run() { 
    try { 
     InputStream inputStream = mConnection.openInputStream(); 
     System.out.println("waiting for input"); 
     byte[] buffer = new byte[BUFFER_SIZE]; 

     while (true) { 
      inputStream.read(buffer); 
      String command = new String(buffer).trim(); 
      System.out.println(command); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

Android客戶端寫入端:

private final OutputStream mmOutStream; 
    String msg = "5:-24:2"; 
    byte[] msgByte = msg.getBytes(); 
    mmOutStream.write(msgByte); 

回答

0

一個我所做的主要錯誤是在使用不同長度的相同bufferinputStream.read(buffer)接收的數據。
我做了以下的變化,並且解決了很多問題。

int length; 
    while (true) { 
     length = inputStream.read(buffer); 
     String command = new String(buffer, 0, length); 
     System.out.println(command); 
    } 
相關問題