2014-11-08 6 views
1

Я пытаюсь разобрать JSONArray и ArrayList в моем приложении для Android. PHP скрипт правильно Retuns ожидаемые результаты, однако Java не удается с нулевым исключением указателя на resultsList.add(map)Android JSONArray to ArrayList

public void agencySearch(String tsearch) { 
     // Setting the URL for the Search by Town 
     String url_search_agency = "http://www.infinitycodeservices.com/get_agency_by_city.php"; 
     // Building parameters for the search 
     List<NameValuePair> params = new ArrayList<NameValuePair>(); 
     params.add(new BasicNameValuePair("City", tsearch)); 

     // Getting JSON string from URL 
     JSONArray json = jParser.getJSONFromUrl(url_search_agency, params); 

     for (int i = 0; i < json.length(); i++) { 
      HashMap<String, String> map = new HashMap<String, String>(); 

      try { 
       JSONObject c = (JSONObject) json.get(i); 
       //Fill map 
       Iterator iter = c.keys(); 
       while(iter.hasNext()) { 
        String currentKey = (String) iter.next(); 
        map.put(currentKey, c.getString(currentKey)); 
       } 
       resultsList.add(map); 

      } 
      catch (JSONException e) { 
       e.printStackTrace(); 

      } 

     }; 

     MainActivity.setResultsList(resultsList); 

    } 
+0

где вы инициализации 'resultsList' в коде? –

+0

Это потому, что 'resultsList' равно null. – immibis

+0

У вас есть инициализация resultList ??? – micky

ответ

1

попробовать, как это может помочь вам,

public void agencySearch(String tsearch) { 
     // Setting the URL for the Search by Town 
     String url_search_agency = "http://www.infinitycodeservices.com/get_agency_by_city.php"; 
     // Building parameters for the search 
     List<NameValuePair> params = new ArrayList<NameValuePair>(); 
     params.add(new BasicNameValuePair("City", tsearch)); 

     // Getting JSON string from URL 
     JSONArray json = jParser.getJSONFromUrl(url_search_agency, params); 

     ArrayList<HashMap<String, String>> resultsList = new ArrayList<HashMap<String, String>>(); 

     for (int i = 0; i < json.length(); i++) { 
      HashMap<String, String> map = new HashMap<String, String>(); 

      try { 
       JSONObject c = json.getJSONObject(position); 
       //Fill map 
       Iterator<String> iter = c.keys(); 
       while(iter.hasNext()) { 
        String currentKey = it.next(); 
        map.put(currentKey, c.getString(currentKey)); 
       } 
       resultsList.add(map); 

      } 
      catch (JSONException e) { 
       e.printStackTrace(); 

      } 

     }; 

     MainActivity.setResultsList(resultsList); 

    } 
+1

Можете ли вы указать, что изменилось? –

+0

Хороший улов. Моя декларация для списка результатов была в другом месте кода класса. Это было мое исходное определение ArrayList > resultsList; после добавления в конец этой строки нового ArrayList >() исключение исчезло. Еще раз спасибо. Возможно, я должен был немного поспать и проверить его снова, прежде чем задавать вопрос. Простая синтаксическая ошибка. Надеюсь, это поможет и другому. – IrishCarBomb

1

Используйте специальный метод, который преобразует ваш JSONArray в список вместо итерации и сборки списка.

Как звонить:

try { 
    ArrayList<HashMap<String,String>> list = (ArrayList<HashMap<String,String>>) toList(json); 
} catch (JSONException e) { 
    e.printStackTrace(); 
} 

Преобразовать массив JSON в список:

private List toList(JSONArray array) throws JSONException { 
    List list = new ArrayList(); 
    int size = array.length(); 
    for (int i = 0; i < size; i++) { 
     list.add(fromJson(array.get(i))); 
    } 
    return list; 
} 

Преобразование JSON в объект:

private Object fromJson(Object json) throws JSONException { 
    if (json == JSONObject.NULL) { 
     return null; 
    } else if (json instanceof JSONObject) { 
     return jsonToMap((JSONObject) json); 
    } else if (json instanceof JSONArray) { 
     return toList((JSONArray) json); 
    } else { 
     return json; 
    } 
} 

Преобразование JSON на карту:

public Map<String, String> jsonToMap(JSONObject object) throws JSONException { 
    Map<String, String> map = new HashMap(); 
    Iterator keys = object.keys(); 
    while (keys.hasNext()) { 
     String key = (String) keys.next(); 
     map.put(key, fromJson(object.get(key)).toString()); 
    } 
    return map; 
} 
+0

Вы попробовали этот @IrishCarBomb? –

+0

Я этого не делал. Это использование GSON LIB? – IrishCarBomb

+0

Нет! он не использует GSON LIB. –