получить много пользы от JSON - PullRequest
0 голосов
/ 09 июля 2011

Мне нужно получить широту и долготу моего андроида, он получил много значений, таких как: enter image description here

Я пытался получить значения из JSON:

ArrayList<String> longitude;
ArrayList<String> latitude;

public void parseJson(String result) {
        try {
            JSONArray jArray = new JSONArray(result);
            for (int i = 0; i < jArray.length(); i++) {
                JSONObject jo = jArray.getJSONObject(i);
                latitude.add(jo.getString("Latitude").toString());
                longitude.add(jo.getString("Longitude").toString());
            }
        } catch (JSONException e) {
            Log.e("log_tag", "Error parsing data " + e.toString());
        }
    }

Но когда я проверяю размер массива, он пуст. Кто-нибудь может помочь или подсказать мою ошибку? Спасибо

@ после изменения, я все еще получил 0 размер массива. Итак, я попытался найти, где он остановился у Тоста, и обнаружил:

public void parseJson(String result) throws JSONException {

        longitude = new ArrayList<String>();
        latitude = new ArrayList<String>();

        JSONArray jArray = (JSONArray)JSONValue.parse(result);

        for (Object obj: jArray) {

            JSONObject jo = (JSONObject)obj;
            //here is when I toast it's got nothing
            latitude.add(jo.get("Latitude").toString());
            longitude.add(jo.get("Longitude").toString());
        }

    }

@ Я получил ответ !! Я вернулся, чтобы использовать свой путь, как это:

public void parseJson(String result) throws JSONException {

        longitude = new ArrayList<String>();
        latitude = new ArrayList<String>();
        JSONArray jArray = new JSONArray(result);
        for (int i = 0; i < jArray.length(); i++) {
            JSONObject jo = jArray.getJSONObject(i);
            latitude.add(jo.getString("Latitude").toString());
            longitude.add(jo.getString("Longitude").toString());
        }

Кажется, я забыл объявить следующее:

         longitude = new ArrayList<String>();
         latitude = new ArrayList<String>();

Я до сих пор не понимаю, почему ваш код не работает. Однако, большое спасибо за вашу помощь:))

Ответы [ 2 ]

1 голос
/ 09 июля 2011

Библиотека json.org излишне тупа из-за своих get<Type> методов, которые все бессмысленно выдают JSONException, я бы порекомендовал перейти на simple-json .Тогда вы можете сделать:

ArrayList<String> longitude;
ArrayList<String> latitude;

public void parseJson(String result) {
    longitude = new ArrayList<String>();
    latitude = new ArrayList<String>();
    JSONArray jArray = (JSONArray)JSONValue.parse(result);
    for (Object obj : jArray) {
        JSONObject jo = (JSONObject)obj;
        latitude.add(jo.get("Latitude").toString());
        longitude.add(jo.get("Longitude").toString());
    }

}

//a simple test case
public static void main(String[] args) {
    String json = "[{\"Latitude\": \"1.23\", \"Longitude\": \"1.23\"}, \n{\"Latitude\": \"1.23\", \"Longitude\": \"1.23\"}, \n{\"Latitude\": \"1.23\", \"Longitude\": \"1.23\"}]";    
    MyParser parser = new MyParser();
    parser.parseJson(json);

    //should print:  3, 3
    System.out.println(parser.latitude.size() + ", " + parser.longitude.size());
}

Должно работать, при условии, что ваш ввод JSON совпадает с вашим примером фрагмента.

0 голосов
/ 09 июля 2011

попробуйте использовать библиотеку gson.Это компактно и быстро.

https://sites.google.com/site/gson/gson-user-guide

...