2010년 12월 30일 목요일

android JSON

쉽게 갈수 있었다...
웹페이지에서 JSON을 사용하고 있어 android도 그냥 붙여 쓰려고 시작했던게 결국 삽질의 시작이 되었고...

구글링에서 많은 내용들이 나오지만 결국 한글이 깨지는 난관이 있었다.
미국 애들은 utf-8에 민감하지 않은지라 관련 내용이 별로 없고, 있다해도 적용해보면 결국 깨진다...ㅡㅡ;;;

일단 android에는 기본적으로 JSON을 지원한다.
이유는 간단할것이다.
Ajax에서 가장 문제인 XML의 큰 덩치를 Android가 모를리 없기 때문.

org.json.JSONArray, org.json.JSONObject 이넘들의 사용법은 생략한다.

결론은
sendJSONData("http://....", "UTF-8" ,parma);

public HttpResponse sendJSONData(String url, String encoding, Map param){
  HttpClient client = new DefaultHttpClient();
        HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000);
        HttpResponse response = null;
        try{
            HttpPost post = new HttpPost(url);
            post.setHeader(HTTP.CONTENT_TYPE,"application/json");
           
            String jsonString = null;
            if(param != null){
             jsonString = jutil.getJSONObjectString(param);
         
            StringEntity se = new StringEntity(jsonString, encoding);
                post.setEntity(se);    
            }          
          
            response = client.execute(post);           
        }catch(Exception e){
         Log.e("Error", "sendJSONData", e);
        } 
       
        return response;
 }

일단 일반적인 POST전송 방식과 약간의 차이는
StringEntity se = new StringEntity(jsonString, encoding);
이거다.
사실 삽질해서 찾은 완벽한 결과물도 이부분이다.

UTF-8을 맞추기 위해 HttpPost, HttpClient이부분만 열심히 건드렸다.
사실 구글링으로 검색된 결과도 이부분에 encoding을 설정하는데 완전 잘못이다.
결국 post.setEntity(se)를 하면서 encoding에 맞춰 바이너리를 생성하는듯하다.

역시 기초가 약한 개발자의 한계로 무한 삽질끝에 알아낸 사실이죠.

XML을 쓰는것보다 가벼워진다는 장점도 있지만 특히 좋은 점은,
결과를 받을때...
XML의 경우 컬럼명을 일일이 알아야 꺼내기 때문에 공통함수에 추출할 컬럼명을 명시하지만(이해가 안가는 분은 패스~~~) JSON은 Iterator함수를 이용해 Map에 바로 담을 수 있다는 장점이있다.

#SCMInno #에스씨엠이노 #WEBDeK

댓글 1개:

Unknown :

jutil 에 대하여 설치법 좀 자세히 알려줄 수 있나요?