2016-07-07 9 views
0

Ich versuche, Testnachrichten von Arduino über Bluetooth zu senden, indem ich "Hallo Welt!" alle 100 ms. Nun, auf Android habe ich eine endlose Ergänzung von "Hallo Welt!" zu meinem StringBuilder und jeder Debug-Iteration habe ich "Hallo Welt! \ nHalle Welt! \ nHalle Welt! \ n ..." usw. Was soll ich tun? Als eine Idee werde ich eine Menge Jsons von Arduino auf Android-Gerät spammen. Muss ich spezielle Char-Sequenzen für Teiler machen, um die Zeit nach jeder Nachricht von Arduino zu unterbrechen? Oder gibt es eine einfachere Entscheidung?BufferedReader fügt endlos auf readLine()

public static String toString(InputStream inputStream) throws IOException { 

      byte[] bs = new byte[inputStream.available()]; 
      if (Utils.isZero(bs.length)) { 
       return ""; 
      } 
      BufferedReader r = new BufferedReader(new InputStreamReader(inputStream)); 
      StringBuilder total = new StringBuilder(); 
      String line; 
      while (r.ready()) { 
       line = r.readLine(); 
       total.append(line).append('\n'); 
      } 

      return total.toString(); 
     } 
+0

Was meinst du mit "break the while"? "Teiler"? Im Moment haben Sie einen 'StringBuilder' (nicht ein https://docs.oracle.com/javase/8/docs/api/java/io/StringWriter.html?), Der mehrere" Zeilen "Text enthält, was nicht schlecht aussieht Warum änderst du es? Außerdem sollten Sie den Geltungsbereich von "line" innerhalb der Schleife behalten. draußen ist zu breit. Ich nehme an, das Fehlen einer Close- oder Exception-Behandlung ist der Kürze halber. Die Verwendung von 'available()' ist unnötig und ein wenig riskant. Das Mischen von Bytes und Zeichen ist riskant. Was ist es, was du jetzt hast, was du nicht magst? –

+0

StringBuilderObj.setLength (0) zu löschen, wenn das ist, was Sie versuchen zu tun .. Ihr Problem ist sehr vage – DarkV1

+0

Ich sagte, ich Spam-Nachrichten von Arduino, und es ist eine endlose InputStream. Endlos. es fügt immer hinzu und fügt hinzu und fügt hinzu. Es wird niemals enden – user2976267

Antwort

0

Sie suchen nicht nach Ende des Streams.

Die richtige Art und Weise, dass die Leseschleife zu schreiben ist:

while ((line = br.readLine()) != null) 
{ 
    total.append(line).append('\n'); 
} 

Aber wenn die Daten, die es Sinn nicht endlos macht sogar eine Schleife haben. Einfach zurückgeben br.readLine(). Es macht nicht einmal Sinn diese Methode zu haben.

Hinweis: Sie müssen kein Byte-Array zuweisen, um seine Länge zu bestimmen.

+0

gibt es kein Ende am Ende des Streams. es wird ständig am anderen Ende hinzugefügt. Das ist das Problem. es verlässt nie die Schleife. – user2976267

+0

Sie sollten also die Daten innerhalb der Schleife statt hinterher verarbeiten oder gar keine Schleife in dieser Methode haben und sie in einer äußeren Schleife aufrufen. – EJP