마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

블루투스 통신에서 들어오는 정보 중에서 문자가 들어오면 에러가 발생 합니다. [closed]

0 추천
readMessage = readMessage.replace("null", "");
    readMessage = readMessage
      .substring(0, readMessage.length() - 2);
    readMessage = readMessage.replaceAll("\n", "");
    readMessage = readMessage.replaceAll("\r", "");

if (readMessage.length() > 4) {
     if (readMessage.substring(0, 2).equals("41"))
      try {
       dataRecieved = readMessage.substring(0, 4);
       value = Integer.parseInt(
         readMessage.substring(4,
           readMessage.length()), 16);
      } catch (NumberFormatException nFE) {
      }
    }
    if (dataRecieved.equals("410C")) {
     int val = (int) ((value * 256) / 4);
     String rpmString = String.valueOf(val);
     rpmText.setText(rpmString);
    }


OBD 정보

ATZ
ELM327 v1.5
01 0C
>41 0C XX XX 7F 01 02

필터 하는 부분에서 오류가 계속 나는 것 같습니다. 이부분이 제대로 되지 않아서 원하는 곳에는 출력은 되지 않고 필터 없이 출력을 하는 곳에는 숫자는 제대로 출력이 됩니다. 필터를 어떻게 해야 될지...(ATZ 부분 부터 오류가 되어버립니다)

질문을 종료한 이유: 해결
안왕초보 (1,390 포인트) 님이 2014년 2월 24일 질문
안왕초보님이 2014년 3월 4일 closed

1개의 답변

0 추천
 
채택된 답변
단계별로 log 를 찍어 확인해보아요~

dataRecieved 가 어떤 값을 가지는지,

value 에 읽어들인 메세지를 정수형으로 파싱하는 부분도 살짝 의심되네요

readMessage(4,끝)값도 확인해보시구여
초보개발자ㅠ (33,870 포인트) 님이 2014년 2월 24일 답변
안왕초보님이 2014년 2월 25일 채택됨
흠..그런데 로그를 바로 볼수 있나요??
구글링 하다가 로그 토스터 라는 사랑 스러운 프로그램이 있군요 ㅎㅎ 이걸로 로그 테스트 해봐야 겠습니다
OBD로 테스트를 해야 되는데 지금 차가 없어서 블루투스 모듈로 임의로 41 0C 23 7C 7F 01 12 이렇게 송신을 해 보았습니다. 그런데 readMessage.substring(0, 2) 를 하니깐 41은 짤리고 0C를 출력 하고
readMessage.substring(4, readMessage.length()) 이 부분에서는 32를 짜르고 뒷 부분을 출력을 하더군요.trim() 값을 줘서 공백을 없게 하였는데 뭐가 문제인지 아...안드로이드 개발을 잘 안하는데 혼자서 하려니 힘드네요 ㅜㅜ 늦어도 내일까지는 완성을 해야 되늰데 ㅜㅜ
아...똑같은 값을 줬는데도 다르게 출력이 되고 있네요...이건 무슨 상황인지...
엄.. 무슨 말씀이신지 잘 못 알아듣겠어요.. ^^;
.trim() 쓰셨는데도 공백제거가 제대로 안된거면
.split()으로 쪼개서 사용하시는게 좋을 것 같네요?
readMessage = readMessage.replaceAll("\\p{Space}", "");
                readMessage = readMessage.trim();
이렇게 두가지 다 해버리니깐 공백이 없어졌어요 ㅎㅎ
그런데 임의로
41 0C 23 7C 7F 01 12 라는 신호를 송신하니깐 앱에서 받는 것이
PID: 10C2 , data : C7F0112  이렇게 받아드립니다...

소스는  
String dataRecieved = "";
dataRecieved = readMessage;
if (readMessage.length() > 4) {
                    tx.append("PID : "+dataRecieved.substring(0, 2) + ", data : "+dataRecieved.substring(4, dataRecieved.length()));
}

이렇게 했습니다....왜 앞쪽 글자가 계속 짤리는지...
으흠.. 저도 안드로이드 시리얼통신할때 비슷한 문제가 있었는데 결국 원인파악은 안됬음.. ㅠㅠ 통신문제인가..?
http://www.androidside.com/bbs/board.php?bo_table=B49&wr_id=135864&page=5
이런 방법있나요?? 특정 string을 찾아서 그것의 첫 글자를 0번으로 정하는 것...이런건 안될까요??
예를 들어서 87 57 45 41 0C 01 12 12 이러한 string 값이 들어오면
이것 중에 41 0C를 찾고 이것의 4를 0번으로 정하는 것이요...
네, 그건 어렵지 않을텐데.. 그것만으로 괜찮은 걸까요?
문자열 작업하시려면 replace, split 등 관련 함수들의 패턴을 이용할 수도 있을테고 아래와 같이 직접 함수를 만들어 하드코딩할수도 있겠네요

http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040104&docId=164727385&qb=7JWI65Oc66Gc7J2065OcIOusuOyekOyXtCDtjKjthLQ=&enc=utf8&section=kin&rank=1&search_sort=0&spq=0&pid=RwYOUdpySEhssuMLUjosssssstR-034855&sid=UwvdXQpyVmYAACONN5U
...