2012-10-19 3 views
2

I 웹 사이트에서 JSON 문자열을 가져 오는 코드가 있습니다된 JSONObject는 안드로이드 4.0 구문 분석 있지만 이전 버전에

{"status":"0","user_id":"123","name":"test","session_code":"6f33d4ee610651530f04b1f700ebc36d"} 
:

post.setEntity(entity); 
HttpResponse responsePOST = client.execute(post); 
HttpEntity resEntity = responsePOST.getEntity(); 
result = EntityUtils.toString(resEntity, HTTP.UTF_8); 

이 결과에서 JSON의 예입니다

은 jsonlint.com에서 유효성을 검사합니다. 나는 안드로이드 4 일

JSONObject jo = new JSONObject(result); 

를 사용하여 분석을 시도, 코드는 잘 작동하지만 이전 버전에, 그것은, 내가 열심히 대신 온라인으로 얻을 수있는 JSON 문자열을 코딩

org.json.JSONException: Value of type java.lang.String cannot be converted to JSONObject 

를 제공합니다 이전 버전에서 작업했습니다. http 요청 출력을 로깅했을 때 모든 성공적인 요청마다 변경되는 세션 코드를 제외하고는 모든 것이 동일하다는 것을 알았지 만 두 세션 코드의 길이와 형식이 같았습니다.

누구에게이 이유가 무엇이며 어떻게 수정해야하는지 알고 있습니다.


UPDATE :

if (!email.isEmpty() && !password.isEmpty()){ 
    try { 
     HttpClient client = new DefaultHttpClient(); 
     String postURL = "http://www.xxxxxx.com/api/login.php"; 
     HttpPost post = new HttpPost(postURL); 
     List<NameValuePair> postParams = new ArrayList<NameValuePair>(); 
     postParams.add(new BasicNameValuePair("email", email)); 
     postParams.add(new BasicNameValuePair("pass", password)); 
     UrlEncodedFormEntity entity = new UrlEncodedFormEntity(postParams, HTTP.UTF_8); 
     post.setEntity(entity); 
     HttpResponse responsePOST = client.execute(post); 
     HttpEntity resEntity = responsePOST.getEntity(); 
     result = EntityUtils.toString(resEntity, HTTP.UTF_8); 
    } catch (UnsupportedEncodingException e) { 
     Log.e(TAG, e.toString()); 
    } catch (ClientProtocolException e) { 
     Log.e(TAG, e.toString()); 
    } catch (ParseException e) { 
     Log.e(TAG, e.toString()); 
    } catch (IOException e) { 
     Log.e(TAG, e.toString()); 
    } 
} 

if (result != null) { 
    try { 
     JSONObject jo = new JSONObject(result); 

     switch (jo.getInt("status")) { 
      case 0 : { 
       userName = jo.getString("name"); 
       userID = jo.getInt("user_id"); 
       authCode = jo.getString("session_code"); 

       return 0; 
      } 

      default: 
       return jo.getInt("status"); 
     } 

    } catch (JSONException e) { 
     Log.e(TAG, e.toString()); 
    } 
} 
+0

는 대신으로 JSONObject을 반환해야합니다 JSONObject. – gowri

+0

을 위해 당신을 공유 .. 안드로이드 2.3.3 버전 자체에서 안드로이드에 코드를 JSON을 사용할 수 있습니다 – Agata

+1

이 결과를 시도 = EntityUtils.toString (resEntity); – Sumant

답변

0

result = EntityUtils.toString(resEntity); 당신은 웹 서비스를 얻기 위해 서버 측 (등 PHP, 노드)에도 UTF-8 인코딩을 구현해야

+0

다음과 같은 결과가 나왔습니다.» "상태": "0", "user_id": "123", "name": "test", "session_code": "8d76df4d5e3663fe839b4f3c57ede2e9"} 또한 utf- utf-8로 구문 분석되어야하는 아랍어 콘텐츠가 수신됩니다. –

+0

응답에 특수 문자가 필요하지 않으면 서버 녀석에게 이러한 특수 문자를 바꿔달라고 요청하면 문제가 해결됩니다. 다른 현명한 당신은 UTF-8로 해석해야하고 json에게 그 입력을주기 전에 당신은 그 특수 문자들을 대체 할 필요가 있지만 응답에서 같은 특수 문자들을 얻는 지 확인해야한다. – Sumant

+0

아라비아 문자는 UTF로되어 있으므로 UTF-8 인코딩을 사용해야합니다. 내가 이해하고 싶은 것은 JSONObject 라이브러리가 API 레벨 1 임에도 불구하고 아이스크림 샌드위치에서 완벽하게 작동하지만 이전 버전이 아닌 이유는 무엇입니까? –

0

(시도 JSON 파싱)가 이전 Android (< 4.0) 기기에서 올바르게 작동하는지 확인하세요. 이거 한번 해봐! 고맙습니다.

0

버전에 문제가 없다고 생각합니다.

돌아 오는 모든 유형의 response을 확인해야 할 수 있습니다.

오류가 발생하면 String을 반환 할 수 있습니다. 당신이 JSONObject으로 모든 시간을 result을 변환하는 경우

다음은 String

당신은 JSONArray를 시도 토론
관련 문제