2016-05-06 3 views
0

Ich möchte nach dem Lesen von einem Gerät (über Bluetooth-Buchse) schreiben Das Problem ist, dass die Weile (wahr) zu beenden, wenn der Sockel geschlossen ist, so kann ich nicht wieder schreiben. DieseSchreiben Sie einen Ausgangsstrom nach dem Lesen von Bluetooth-Buchse Android

ist der Code:

 try { 
      // This will block until it succeeds in connecting to the device 
      // through the bluetoothSocket or throws an exception 
      bluetoothSocket.connect(); 
      try { 
       connectingThread.sleep(1000); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
      outstream = bluetoothSocket.getOutputStream(); 
      outstream.write("P".getBytes()); 
      instream = bluetoothSocket.getInputStream(); 
      byte[] buffer = new byte[128]; // buffer store for the stream 
      int bytes; // bytes returned from read() 
      String readMessage = ""; 

      // Keep listening to the InputStream until an exception occurs 
      while (true) { 
       try { 
        // Read from the InputStream 
        bytes = instream.read(buffer); 
        if(bytes!= -1){ 
        // Send the obtained bytes to the UI activity 
        readMessage = new String(buffer, 0, bytes); 

        arrayList.add(readMessage); 
        biodyMsg = TextUtils.join("", arrayList); 
        } 

       } catch (Exception e) { 

        Log.d("Read Error", e.toString()); 

       }finally { 
        outstream = bluetoothSocket.getOutputStream(); 
        outstream.write("F".getBytes()); 
       } 
       break; 
      } 

     } catch (IOException connectException) { 
      connectException.printStackTrace(); 
      try {  
       bluetoothSocket.close(); 
      } catch (IOException closeException) { 
       closeException.printStackTrace(); 
      } 
     } 

Logcat

Können Sie mir helfen

Antwort

0

Der einzige Weg, eine while (true) Schleife beenden kann, ist über eine break Anweisung oder durch eine abgefangene Ausnahme erhalten, und du hast nicht erwähnt, einen zu bekommen. Es gibt zwei mögliche Ausnahmen in diesem Code:

  • IOException: aber der einzige Weg, einen IOException mit diesem Code erhalten können, ist, wenn der Peer setzt die Verbindung.
  • ArrayIndexOutOfBoundsException bei der Konstruktion der String, wenn bytes ist negativ, was es sein kann: siehe unten; aber du hast das auch nicht erwähnt.

Ihr eigentliches Problem ist, dass Sie nicht bytes für -1 Überprüfung, das Ende des Streams anzeigen würde, was wiederum anzeigen würde, dass der Peer die Verbindung geschlossen hat, was wiederum bedeutet, dass Sie die in der Nähe sollten Socket und brechen Sie aus der Leseschleife.

+0

Entschuldigung für die Ausnahme nicht setzen: java.io.IOException: Gebrochene Leitung –

+0

Also der Peer hat die Verbindung zurückgesetzt. Was ist deine Frage? – EJP

+0

Kann ich vor dem Zurücksetzen der Verbindung schreiben Ich möchte "F" nach Abschluss des Lesevorgangs senden –

Verwandte Themen