2013-05-24 4 views
-2

웹 서버와 데이터를 교환하려고합니다. 문제가있는 코드는 다음과 같습니다.Android, org.json.jsonarray를 jsonobject로 변환 할 수 없습니다.

public void getOnlineData(View view) { 
     try { 
      // http://androidarabia.net/quran4android/phpserver/connecttoserver.php 
      int TIMEOUT_MILLISEC = 10000; 
      // Log.i(getClass().getSimpleName(), "send task - start"); 
      HttpParams httpParams = new BasicHttpParams(); 
      HttpConnectionParams.setConnectionTimeout(httpParams, 
        TIMEOUT_MILLISEC); 
      HttpConnectionParams.setSoTimeout(httpParams, TIMEOUT_MILLISEC); 
      // 
      HttpParams p = new BasicHttpParams(); 
      // p.setParameter("name", pvo.getName()); 
      p.setParameter("user", "1"); 

      // Instantiate an HttpClient 
      HttpClient httpclient = new DefaultHttpClient(); 
      String url = "http://twenty5eight.co.uk/portal/" + 
         "json/json.php"; 
      HttpPost httppost = new HttpPost(url); 

      // Instantiate a GET HTTP method 
      try { 
       Log.i(getClass().getSimpleName(), "send task - start"); 
       // 
       List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(
         2); 
       nameValuePairs.add(new BasicNameValuePair("user", "1")); 
       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
       ResponseHandler<String> responseHandler = new BasicResponseHandler(); 
       String responseBody = httpclient.execute(httppost, 
         responseHandler); 
       // Parse 
       JSONObject json = new JSONObject(responseBody); 
       JSONArray jArray = json.getJSONArray("posts"); 
       ArrayList<HashMap<String, String>> mylist = 
         new ArrayList<HashMap<String, String>>(); 

       for (int i = 0; i < jArray.length(); i++) { 
        HashMap<String, String> map = new HashMap<String, String>(); 
        JSONObject e = jArray.getJSONObject(i); 
        String s = e.getString("post"); 
        JSONObject jObject = new JSONObject(s); 

        map.put("id", jObject.getString("id")); 
        map.put("name", jObject.getString("name")); 
        map.put("birthyear", jObject.getString("birthyear")); 

        mylist.add(map); 
       } 
       Toast.makeText(this, responseBody, Toast.LENGTH_LONG).show(); 


      } catch (ClientProtocolException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      // Log.i(getClass().getSimpleName(), "send task - end"); 

     } catch (Throwable t) { 
      Toast.makeText(this, "Request failed: " + t.toString(), 
        Toast.LENGTH_LONG).show(); 
     }  
    } 

편집 : 로그에 오류가 없습니다. 오류 처리기가 "요청 실패 : org.json.JSONException : org.json.jsonArray 유형의 값을 jsonobject로 변환 할 수 없습니다"라는 오류 메시지가 표시됩니다.

+0

logcat을 넣어주세요 – wazaminator

+2

JSONObject로 변환하려고 시도한 문자열을 게시하십시오 – Blackbelt

+0

또한 메인 ui 스레드에서 네트워크 관련 작업을 실행하고 있는지 확인하십시오. – Raghunandan

답변

0

귀하의 URL에서 데이터는 JSON 배열입니다. JSONArray의 String에서 JSONObject를 만들려고합니다. 이 방법으로는 작동하지 않습니다. JSONArray를 대신 작성하십시오.

또한 귀하의 URL에서 귀하의 json에는 아무 키나 '게시물'이 없습니다.

+0

당신은 이미 그 중 99 %를 가지고 있습니다. 요청 결과에서 JSONObject를 작성하는 방법을 이해했다면 대신 JSONArray를 만드는 방법을 이해할 수 있어야합니다. – njzk2

+0

올바른 방향으로 나를 가리켜 주셔서 감사합니다 njzk2, 지금 일하고있다. :) –

관련 문제