2011-08-07 5 views
0

난에 상태 요청 명령을 보낼 수있는 장치를 가지고 있고, 나는 그것이안드로이드 읽기 statusBuffer ((데이터 없음, 아무 충돌을 읽을 수 없음)

바이트 = mmInStream.read를 사용하여 읽을 해결되지 않습니다);

상태가 변경되면 문제가 있습니다. 가끔은 현재 상태를 되돌릴 것이고, 프로그램이 그 줄에 멈추고 다른 일은하지 않을 때가 있습니다. 충돌하지 않고 다음 줄 또는 다른 곳으로 이동합니다. 나는 장치를 끄고 연결을 끊음으로써 만 이동할 수 있습니다.

여기에 검은 딸기 토치가 있습니다.이 오류는 전혀 없으므로 내 코드 여야합니다.

아무에게도 문제 해결 팁을 줄 수 있습니까? 아래는 장치의 현재 상태를 읽는 while 루프입니다.

while (true) { 

      getStatus(); 

      try { 
        bytes = 0; 
        while(bytes < 1){ 

         bytes = mmInStream.read(statusBuffer); 


         if (bytes != 0){ 
          response = new String(statusBuffer); 
              //Handle response code 
          } 

         } 
        } 
       } catch (Exception e) { 
        Log.e(TAG, "disconnected FROM WHILE TRUE LOOP", e); 
        connectionLost(); 
        break; 
       } 
    } 

답변

0

사용할 수있는 바이트가없는 경우 -1을 읽음으로써 반환됩니다. 비교를 놓치고 반복합니다.

줄이 \ n 숯불로 끝나는 경우, 예를 들어 BufferedReader를 통해 읽는 것이 훨씬 쉽습니다. 아무튼, 루프가 잘 설계되지 않았습니다.

할 // 동안 (byteRead! = -1)

감사 스테판

을 { // 바이트 //이 byteRead

//if(byteRead != -1) 
    //build a string 

에 결과를 저장하는 판독} 수행

+0

코드가 제대로 작동하지 않아 일부 로그 정보와 함께 읽었습니다. Log.i (TAG, "WHILE LOOP : About about read 바이트 "); \t \t \t \t \t bytes = mmInStream.read (statusBuffer); \t \t \t \t \t Log.i (TAG, "WHILE LOOP :"+ Integer.toString (bytes) + "bytes"); 하지만 문제가 발생하면 두 번째 로그에 표시되지 않으므로 -1인지 아닌지 확인할 수 없습니다. – Bryan

+0

그리고 버퍼를 채우는 대신 하나의 바이트를 읽으면 어떻게됩니까? – Snicolas

+0

똑같은 일이 생기고, 나는 byteRead = mmInstream.read(); 또한 1 바이트 버퍼와 동일한 결과를 보았습니다. – Bryan

관련 문제