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

아두이노로부터 수신받은 데이터 두가지를 if문으로 나누어서 띄우려고 합니다

0 추천
아래처럼 블루투스로 연결된거 까지 확인했는데 a와 b 둘 중 하나가 넘어오면 그 값에 따라 토스트 출력을 다르게 하고싶은데 나오질 않아서 도와주실수 있나요?

bt.setOnDataReceivedListener(new BluetoothSPP.OnDataReceivedListener() {
            @Override
            public void onDataReceived(byte[] data, String message) {
                if(data.equals("a")) {
                    Toast.makeText(getApplicationContext(), "위험해요", Toast.LENGTH_SHORT).show();
                }else if(data.equals("b")) {
                    Toast.makeText(getApplicationContext(), "안전해요", Toast.LENGTH_SHORT).show();
                }
            }
        });
루너후 (140 포인트) 님이 2020년 11월 26일 질문
토스트 메시지가 나오는건확인하셧나여?
확인이 안된다면 데이터가 어떤 값ㅇ르 가지고 있는지부터 확인해보세여
ex) Log.d("Test","Received Data = $data")

로그찍어서 data값 확인후 정상적으로 데이터가 들어오는거 확인 해보세여 그게제일먼저 되야될일

1개의 답변

0 추천
public void onDataReceived(byte[] data, String message) {
   boolean receivedOptionA = "a".equals(data)
   boolean recievedOptionB = "b".equals(data);
   boolean receivedUnexpectedSignal  = !receivedOptionA || !recievedOptionB;
   if (receivedUnexpectedSignal) {
      throw IllegalArgumentException("It must be wanted data");
   }

  if(receivedOptionA) {
       Toast.makeText(getApplicationContext(), "위험해요", Toast.LENGTH_SHORT).show();
       return;
   }
 
  Toast.makeText(getApplicationContext(), "안전해요", Toast.LENGTH_SHORT).show();
   
}

메소드에 첫줄에 조건을 하나 더 추가하셔서 님이 받아야 할 문자열이 아니면 Exception을 던지세요. 그래야 예외에 안전한 프로그램이 됩니다. a나 b가 아닌 문자열이 올 때는 무슨 일이 일어나는지 알 수가 없어서 버그의 원인이 됩니다.

spark (227,530 포인트) 님이 2020년 11월 26일 답변
...