2016-05-15 56 views
2

我創建了一個代碼,用於從Arduino中讀取投射到我的Android設備的數據。它是這樣的:在Android中創建Runnable中的條件

public void run() { 
     byte[] buffer = new byte[1024]; 
     int bytes; 
     final StringBuilder readMessage = new StringBuilder(); 
     while (true) { 
      try { 
       bytes = connectedInputStream.read(buffer); 
       final String string_now = new String(buffer, 0, bytes); 
       readMessage.append(string_now); 
       // final int finalBytes = bytes; 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         tvBPM.setText(string_now); 
         readMessage.setLength(0); 
        } 
       }); 
      } catch (IOException e) { 
       Toast.makeText(getApplicationContext(),"Connection Lost!",Toast.LENGTH_LONG).show(); 
      } 
     } 
    } 

此代碼位於我的「內部私有類ThreadConnected繼承Thread」

現在,通過string_now保存的值被數字。我想告訴用戶存儲的值是否大於150或小於50.下面是我嘗試過的代碼,但我沒有完全工作。

runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        final int getValue = Integer.getValue(Integer.parseInt(string_now)); 
        if (getValue > 150 || getValue < 50) { 
         Toast.makeText(getApplicationContext, "Unstable", Toast.LENGTH_SHORT).show(); } 
        else { 
        tvBPM.setText(string_now); 
        readMessage.setLength(0); } 
       } 
      }); 

關於如何使這項工作的任何提示?謝謝。

+2

「不完全工作」是不是真的有用的信息。你能提供更多關於你的期望和實際情況的信息嗎? –

+0

該代碼從我創建的原型顯示tvBPM上的心率值。現在我想要檢查tvBPM中顯示的值是否符合條件(即if else語句)。目前,在我按下「開始」按鈕後,應用程序纔會關閉,而「開始」按鈕又將其指向包含runOnUiThread()代碼的線程。對不起,我的英文不好 – KCX

回答

1
bytes = connectedInputStream.read(buffer); 
final String string_now = new String(buffer, 0, bytes); 

該代碼將永遠同行關閉連接的時候,就會開始顯示垃圾甚至跑後,給ArrayIndexOutOfBoundsException,或什麼的。你缺少的兩條線之間的以下內容:

if (bytes == -1) 
{ 
    break; 
} 

catch塊之後執行以下操作:

finally 
{ 
    try 
    { 
     connectedInputStream.close(); 
    } 
    catch (IOException exc) 
    { 
     // whatever ... 
    } 
} 
+0

我明白了。但是我刪除了上面的兩個代碼,因爲它應該在arduino打開時捕獲所有的值。謝謝你指出,雖然。 – KCX

+0

Arduino斷開連接後無法捕捉任何東西。沒有進一步的價值來追趕。你將不得不重新連接,或等到對方重新連接。 – EJP