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

Android Http 500 에러 질문

0 추천

Spring 으로 결로 만들어놓고 

그냥 브라우져에서 잘호출되는데

App에서만 호출하면 

아래와같은 에러가 발생합니다 ㅠㅠ

왜그런건가요?

 

-소스-

protected String doInBackground(Void... params) {

    MultiValueMap<String, String> parameters = new LinkedMultiValueMap<String, String>();
    parameters.add("key", "값");

    HttpHeaders headers = new HttpHeaders();

    headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
    HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(parameters, headers);

    RestTemplate restTemplate = new RestTemplate();

    List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();
    messageConverters.add(new FormHttpMessageConverter());
    messageConverters.add(new StringHttpMessageConverter());
    restTemplate.setMessageConverters(messageConverters);

    String result = restTemplate.postForObject("http://rovitekserver.cafe24.com/mimotemember", parameters, String.class);

    return result;
}

 

 

-에러-

W/RestTemplate: POST request for "http://rovitekserver.cafe24.com/mimotemember" resulted in 500 (Internal Server Error); invoking error handler
E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
                  Process: kr.com.rovitek.mimote, PID: 14340
                  java.lang.RuntimeException: An error occured while executing doInBackground()
                      at android.os.AsyncTask$3.done(AsyncTask.java:300)
                      at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
                      at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
                      at java.util.concurrent.FutureTask.run(FutureTask.java:242)
                      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
                      at java.lang.Thread.run(Thread.java:818)
                   Caused by: org.springframework.web.client.HttpServerErrorException: 500 Internal Server Error
                      at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:78)
                      at org.springframework.web.client.RestTemplate.handleResponseError(RestTemplate.java:524)
                      at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:481)
                      at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:439)
                      at org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:317)
                      at kr.com.rovitek.mimote.Utiles.HttpMethd.doInBackground(HttpMethd.java:51)
                      at kr.com.rovitek.mimote.Utiles.HttpMethd.doInBackground(HttpMethd.java:22)
                      at android.os.AsyncTask$2.call(AsyncTask.java:288)
                      at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
                      at java.lang.Thread.run(Thread.java:818) 

슈퍼마리오똥 (420 포인트) 님이 2016년 12월 1일 질문

1개의 답변

0 추천
안녕하세요

저는 HttpURLConnection 쓰니까 잘 호출 되네요

혹시 이거 아닌가요? 확인해보세요~

http://eblossom.tistory.com/4
히로시 (10,800 포인트) 님이 2016년 12월 1일 답변
히로시님이 2016년 12월 1일 수정
맞습니다 ㅠㅠ
 HttpURLConnection 이걸로쓰면될까요?
이거 써보세요
응답결과 값을 JSON 으로 만드는 부분만 바꾸셔서 하시면 됩니다.

// POST 방식
    public static JSONObject sendHttpPost(String URL, JSONArray jsonObjSend ){

        URL url = null;
        HttpURLConnection conn = null;
        OutputStream os = null;
        InputStream is = null;
        ByteArrayOutputStream bos = null;
        String response = "";
        JSONObject json = null;

        try {

            url = new URL(URL);
            conn = (HttpURLConnection) url.openConnection();
            conn.setDoOutput(true);
            conn.setUseCaches(false);
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "application/json");
            conn.setDoInput(true);

            // 새로운 OutputStream에 요청할 OutputStream을 넣는다.
            os = conn.getOutputStream();
            os.write(jsonObjSend.toString().getBytes());
            os.flush();

            // 200 성공코드
            // 400 문법에러
            // 401 권한 에러 : 서버키 확인
            if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {

                Log.e("URL Connection 결과 >>>" , "성공 " + conn.getResponseCode() );

                is = conn.getInputStream();
                bos = new ByteArrayOutputStream();

                byte[] byteBuffer = new byte[1024];
                byte[] byteData = null;
                int nLength = 0;
                while((nLength = is.read(byteBuffer, 0, byteBuffer.length)) != -1) {
                    bos.write(byteBuffer, 0, nLength);
                }
                byteData = bos.toByteArray();

                response = new String(byteData);

                System.err.println("성공 response >>" + response);

                json  = new JSONObject(response);

            }else{
                Log.e("URL Connection 결과 >>>" , "실패 " + conn.getResponseCode() );
            }
            conn.disconnect();
       } catch (Exception ex) {
           Log.e("POST 전송 Exception >> ", "호출 URL >> " + URL + "  에러 >>" + ex.toString());
       }
        return json;
    }
적용해보니 502 에러가납니다 ㅠㅠ 흑흑
웹창에서 해봤는데
톰캣 중지 되셨거나 페이지 로딩이 지연되네요... 서버측 확인 해보세요
엇 서버가왜이러지 넵 감사합니다 확인해보겟습니다 ㅠ
...