2016-05-15 4 views
2

Ich habe einen Code erstellt, der Daten auf meinem Android-Gerät von einem Arduino geworfen liest. Es geht so:Erstellen von Bedingungen in einem Runnable in Android

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(); 
      } 
     } 
    } 

Dieser Code befindet sich in meinem sind

nun die gehaltenen Werte von string_now ‚private Klasse ThreadConnected Thema‘ erstreckt Zahlen. Ich möchte dem Benutzer mitteilen, ob der dort gespeicherte Wert größer als 150 oder kleiner als 50 ist. Hier ist ein Code, den ich ausprobiert habe, aber ich arbeite nicht vollständig.

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); } 
       } 
      }); 

Irgendwelche Tipps, wie ich das schaffen kann? Vielen Dank.

+2

„nicht voll arbeiten“ ist nicht wirklich nützliche Informationen. Können Sie mehr Informationen darüber geben, was Sie erwarten und was tatsächlich passiert? –

+0

Der Code zeigt die Herzfrequenzwerte auf tvBPM von einem Prototyp an, den ich erstellt habe. Jetzt möchte ich die Werte in tvBPM überprüft werden, wenn es die Bedingungen erfüllt (d. H. Die if else-Anweisung). Derzeit wird die App nur geschlossen, nachdem ich den Start-Knopf gedrückt habe, der wiederum den Thread mit dem runOnUiThread() - Code anleitet. Sorry für mein schlechtes Englisch – KCX

Antwort

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

läuft Dieser Code für immer, selbst nachdem der Peer die Verbindung schließt, wenn es Müll mit starten, geben ArrayIndexOutOfBoundsException, oder was auch immer. Sie vermissen die folgenden zwischen diesen beiden Linien:

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

und die folgenden nach dem catch Block:

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

Ich sehe. Aber ich habe diese zwei Codes oben entfernt, weil es alle Werte vom Arduino abfangen soll, während es eingeschaltet ist. Danke, dass du das gezeigt hast. – KCX

+0

Es kann nichts fangen, nachdem der Arduino die Verbindung getrennt hat. Es gibt keine weiteren Werte zum "Fangen". Sie müssen die Verbindung erneut herstellen oder warten, bis der Peer wieder verbunden ist. – EJP