2013-05-11 2 views
1

Я знаю, что это очень часто задаваемый вопрос, и я нашел довольно много сообщений в SO. Мой код приведен ниже, и я не вижу причины, по которой массив json возвращает null. Может кто-нибудь, пожалуйста, просмотрите его для меня, пожалуйста? Я не оставил камней, оставшихся нетронутыми! :(Json Array возвращает нуль во время разбора в Android

JsonArray jsonArr = JSONfunctions.getJSONfromURL(url); 
    try { 
     if (jsonArr != null) { 
      for (int i = 0; i < jsonArr.length(); i++) { 
       HashMap<String, String> map = new HashMap<String, String>(); 
       JSONObject jsonObj = jsonArr.getJSONObject(i); 

       map.put(TAG_CODE, jsonObj.getString("Code")); 
       map.put(TAG_DISPLAY_NAME, jsonObj.getString("UserName")); 
       map.put(TAG_PROGRAM_NAME, jsonObj.getString("Password")); 
       mylist.add(map); 
      } 
     } 
    } catch (JSONException e) { 
     Log.e("log_tag", "Error parsing data " + e.toString()); 
    }                      






public class JSONfunctions { 

public static JSONArray getJSONfromURL(String url) { 
    InputStream is = null; 
    String result = ""; 
    JSONArray jArray = null; 

    // http post 
    try { 

     HttpClient httpclient = new DefaultHttpClient(); 
     HttpGet httppost = new HttpGet(url); 
     // httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
     HttpResponse response = httpclient.execute(httppost); 
     HttpEntity entity = response.getEntity(); 
     is = entity.getContent(); 

    } catch (Exception e) { 
     Log.e("log_tag", "Error in http connection " + e.toString()); 
    } 

    // convert response to string 
    try { 
     BufferedReader reader = new BufferedReader(new InputStreamReader(
       is, "iso-8859-1"), 8); 
     StringBuilder sb = new StringBuilder(); 
     String line = null; 
     while ((line = reader.readLine()) != null) { 
      sb.append(line + "\n"); 
     } 
     is.close(); 
     result = sb.toString(); 

       // Result is always returning me an array.(not null) 

    } catch (Exception e) { 
     Log.e("log_tag", "Error converting result " + result); 
    } 
    try { 
     jArray = new JSONArray(result); 

       // Goes into the catch block 

    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     Log.e("log_tag", "Error parsing result " + result); 
    } 
    return jArray; 

} 

}

+0

Где вы держали этот код, используется отдельный поток или AsyncTask? – Pragnani

+0

В отдельном файле класса, но не в Задаче Aysnc. Кажется, он работает когда-то. :( – buggydroid

+0

Он будет работать на более старой версии для Android (до 3.0). Вы должны перенести его в AsyncTask – Blackbelt

ответ

1

Что сервер возвращается ({"FirstName": "\"firstname"", "LastName": "\"lastname\"", "Code": "\"id\""}) является JSONObject и не JSONArray, вы должны изменить

JSONArray jArray = null; 

в

JSONOBject jArray = null; 

и

jArray = new JSONArray(result); 

в

jArray = new JSONOBject (result); 
+0

JSONObject json = JSONfunctions.getJSONfromURL (url); \t \t JSONArray jsonArr = json.getJSONArray (TAG); Что вы предлагаете обрабатывать неназванные массивы, где тег отсутствует? Также это JsonArray, потому что теги отсутствуют. Поэтому я могу напрямую использовать getJsonFromUrl. – buggydroid

+0

у вас нет jsonarray. У вас есть jsonobject. – Blackbelt

+0

Хорошо! Итак, следующий вопрос: как обрабатывать JSON-объект в случае неназванных массивов? Это единственный способ найти это. И это сработало раньше. У вас есть образец для обработки неназванных массивов с помощью JSONObject? – buggydroid