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

EditText로 입력받은 문자열 writeSoket하기...

0 추천

게안녕하세요.

어플을 공부하고 있는 학생입니다.

간단한 테스트 어플을 만들어보는 중 문제가 있어서 질문합니다..

와이파이 id와 pwd를 보내는 sendMessage클래스입니다.

et4, et5에 입력받은 문자열을 받아와 writeSocket.write함수로 쏴주는 부분인데요.

계속 오류가 납니다...b를 스트링으로 바꾸라고..

저의 궁금증을 해결해주실수 있나요...ㅠㅠ

    class sendMessage extends Thread {
        public void run() {
            try {
                byte ssid = Byte.parseByte(et4.getText().toString());
                byte pwd = Byte.parseByte(et5.getText().toString());

                byte[] b = new byte[100];
                b = "{\"wifi\":\""+ssid+"\",\""+pwd+"}".getBytes();
                writeSocket.write(b);
            } catch (Exception e) {
                final String recvInput = "메시지 전송에 실패하였습니다.";
                Log.d("SetServer", e.getMessage());
                mHandler.post(new Runnable() {

                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        setToast(recvInput);
                    }

                });

            }

        }
    }

 

럭셔리홍 (120 포인트) 님이 2017년 10월 30일 질문

1개의 답변

0 추천
writeSocket이 어떤 클래스의 인스턴스인지 모르겠습니다만

스트링 형으로 넣으라고 말씀하신걸로 봐서는 write 함수가 받는 인자값의 타입이 바이트 배열이 아닌것 같습니다.

현재 write 함수에 바이트 배열을 전달하고 있으신데 이것을 그냥 String 형태로 전달 하시면 될것 같습니다.

또한 송수신 규약이  JSON 형태이면 SimpleJSON 등의 라이브러리를 사용하여 JSON 객체를 만드는 방법도 있습니다.
익명사용자 님이 2017년 10월 30일 답변
제가 실수를 했네요.
writeSocket은 DataOutputStream이고 FilterOutputStream을 상속받습니다.
FilterOutputStream의 write함수는 인자를 바이트로 받습니다.

public void write(byte b[]) throws IOException {
        write(b, 0, b.length);
    }
public void write(byte b[], int off, int len) throws IOException {
        if ((off | len | (b.length - (len + off)) | (off + len)) < 0)
            throw new IndexOutOfBoundsException();

        for (int i = 0 ; i < len ; i++) {
            write(b[off + i]);
        }
    }
규약은 따로 정해져있는게 아니라 임의로 작성한거라 수정이 가능한요..
목적은 와이파이 주소 및 비밀번호를 받아서 소켓통신하는 방향입니다.
저도 소스를 보다 놓친게 있네요
ssid pwd 변수가 바이트 형입니다.
b는 스트링 + 바이트 변수  형태로 되어 있습니다.
ssid와 pwd를 스트링 형 그대로 대입 하신후 변수 b 할당시 getbyte 하시면 될 것 같습니다.

아래와 같이 해보시면 될 것 같습니다.

String ssid = et4.getText().toString();
String pwd = et5.getText().toString();

byte[] b = ("{\"wifi\":\""+ssid+"\",\""+pwd+"}").getBytes();
...