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

App에서 http Post방식으로 서버와 데이터 통신 에러

0 추천


String   myid = "1234",mypw="5678";
    public static String defaultUrl = "http://xxxxxxxxx.co.kr/test1.php";

        private String request(String urlStr) {
            StringBuilder output = new StringBuilder();
            try {
                URL url = new URL(urlStr);
                HttpURLConnection conn = (HttpURLConnection)url.openConnection();

                if (conn != null) {
                    //conn.setConnectTimeout(10000);
                    conn.setDefaultUseCaches(false);
                    conn.setRequestMethod("POST");
                    conn.setDoInput(true);
                    conn.setDoOutput(true);
                    conn.setRequestProperty("content-type", "application/x-www-form-urlencoded");

                    int resCode = conn.getResponseCode();
                    if (resCode == HttpURLConnection.HTTP_OK) {

                        Log.d("shktest","1");
                        StringBuffer buffer = new StringBuffer();
                        buffer.append("id").append("=").append(myid);

                        OutputStreamWriter outStream = new OutputStreamWriter(conn.getOutputStream());   // 여기서 에러 발생

                        PrintWriter writer = new PrintWriter(outStream);
                        writer.write(buffer.toString());
                        writer.flush();
                        writer.close();

                        BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())) ;
                        String line = null;

- 에러.
07-30 21:29:43.764      790-809/org.androidtown.http E/SampleHTTP﹕ Exception in processing response.
    java.net.ProtocolException: cannot write request body after response has been read
            at libcore.net.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:203)
            at org.androidtown.http.MainActivity$ConnectThread.request(MainActivity.java:110)
            at org.androidtown.http.MainActivity$ConnectThread.run(MainActivity.java:75)
07-30 21:29:43.774      790-809/org.androidtown.http W/System.err﹕ java.net.ProtocolException: cannot write request body after response has been read
07-30 21:29:43.774      790-809/org.androidtown.http W/System.err﹕ at libcore.net.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:203)

 

   안녕하세요

   Http를 이용하여 POST 방식으로 서버에 ID를 보내 주고 보내준 내용을 그대로 서버에서 받아 App에서 표시해 주는

테스트 코드 입니다만,  위의 코드중(표시한 부분 ) 스트림 아웃에서 앱이 구동될때 에러가 발생하면서 멈춤니다.

서버로 ID를 보내는 부분이 문제인데요. 구글링해도 답을 찾지 못하겠네요.

UI는 핸들러이며, 통신은 스레드 방식으로 구성하였습니다.

초보자살려 (160 포인트) 님이 2015년 7월 31일 질문

1개의 답변

0 추천
해당에러는 서버에서 Respons값을 내려보내주지 않아거나 없어서 발생하는겁니다.

그래서 아웃풋스티림이 읽지를 못하여 발생하는 익셉션입니다.
조썽 (460 포인트) 님이 2015년 7월 31일 답변
제가 이해하기로는
OutputStreamWriter outStream = new OutputStreamWriter(conn.getOutputStream())     << 이부분은 App 에서 서버로 보내는것으로 이해 했는데  반대로 서버에서 Respons 값을 내려 보내 주지 않아서 발생한거라 하시면 좀더 자세한 설명을 부탁 드려도 되나요?
서버에서 받는 값은 InputStreamReader가 이후에 또 있어서요.
...