안드로이드/Http Post 통신
XML POST 통신
resky123
2014. 5. 15. 14:27
try { HttpClient client = new DefaultHttpClient(); HttpParams param = client.getParams(); // 타임 아웃을 설정합니다. HttpConnectionParams.setConnectionTimeout(param, NDT); HttpConnectionParams.setSoTimeout(param, NDT); // 서버에 접속합니다. String postURL = DataManager.ServerAddr; HttpPost post = new HttpPost(postURL); // 파라미터 값을 셋팅합니다. List* 주의 사항params = new ArrayList (); params.add(new BasicNameValuePair("태그1", "보낼값1")); params.add(new BasicNameValuePair("태그2", "보낼값2")); params.add(new BasicNameValuePair("태그n", "보낼값n")); // 한글 깨짐 방지를 위해 UTF-8로 셋팅합니다. (특문은 안보내는게 정신건강에 이롭습니다.) UrlEncodedFormEntity ent = new UrlEncodedFormEntity(params, HTTP.UTF_8); post.setEntity(ent); // 결과를 받습니다. HttpResponse responsePOST = client.execute(post); HttpEntity resEntity = responsePOST.getEntity(); // 결과 값이 null이 아니라면.... if (resEntity != null) { // 파싱합니다. xmlpullparser를 참고하시면 이해가 빠르실겁니다. XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser parser = factory.newPullParser(); InputStream is = resEntity.getContent(); // 글자 깨짐이 발생한다면 언어코드에 맞게 utf-8을 바꾸세요. parser.setInput(is, "utf-8"); String tag = ""; int eventType = parser.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { switch (eventType) { case XmlPullParser.START_DOCUMENT: case XmlPullParser.END_DOCUMENT: case XmlPullParser.END_TAG: break; case XmlPullParser.START_TAG: tag = parser.getName(); break; case XmlPullParser.TEXT: if (tag.equals("result")) { // 에러 코드 err = Integer.parseInt(parser.getText()); } break; } eventType = parser.next(); } } } catch (Exception e) { e.printStackTrace(); }
HttpEntity resEntity = responsePOST.getEntity(); 에서 resEntity값을 로그로 출력하면서
파싱을 하는것은 하지 마세요.
java.lang.IllegalStateException: Content has been consumed 경고가 발생합니다.
나쁜 예 )
HttpResponse responsePOST = client.execute(post);
HttpEntity resEntity = responsePOST.getEntity();
if (resEntity != null) {
Log.i("결과 확인" , EntityUtils.toString(resEntity));
파싱....
이러면 에러는 안 나오고 경고가 나오면서 값은 안들어옵니다.