Как поместить JSONArray в Android ListView - PullRequest
0 голосов
/ 16 сентября 2010

Я пытаюсь заполнить ListView в приложении для Android. У меня есть данные в JsonArray, но это не работает для непосредственного использования JsonArray. Любые предложения Как заполнить ListView?

   JSONObject json = null;
   try {
       json = new JSONObject(client.getResponse());
       JSONArray nameArray = json.names();  
       JSONArray valArray = json.toJSONArray(nameArray);

   } catch (JSONException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
   } 

   setListAdapter(new ArrayAdapter<String>(this, 
        android.R.layout.simple_list_item_1, valArray));

Я пытаюсь использовать valArray, но он не работает. Также мне интересно, что содержит valarray? (JsonArray, что в нем содержится)

Ответы [ 2 ]

3 голосов
/ 10 августа 2012

Только что реализовал JSONArrayAdapter для получения данных JSON в ListView. Он расширяет android.widget.SimpleAdapter и работает так же, как его родительский класс.

У него есть только один статический метод, который преобразует JSONArray в List<Map<String, String>>, который используется для инициализации SimpleAdapter.

import ...

public class JSONArrayAdapter extends SimpleAdapter {

    public JSONArrayAdapter(Context context, JSONArray jsonArray, 
                            int resource, String[] from, int[] to) {
      super(context, getListFromJsonArray(jsonArray), resource, from, to);
    }

    // method converts JSONArray to List of Maps
    protected static List<Map<String, String>> getListFromJsonArray(JSONArray jsonArray) {
        ArrayList<Map<String, String>> list = new ArrayList<Map<String, String>>();
        Map<String, String> map;
        // fill the list
        for (int i = 0; i < jsonArray.length(); i++) {
            map = new HashMap<String, String>();
            try {
                JSONObject jo = (JSONObject) jsonArray.get(i);
                // fill map
                Iterator iter = jo.keys();
                while(iter.hasNext()) {
                    String currentKey = (String) iter.next();
                    map.put(currentKey, jo.getString(currentKey));
                }
                // add map to list
                list.add(map);
            } catch (JSONException e) {
                Log.e("JSON", e.getLocalizedMessage());
            }


        }
        return list;
    }


}

Просто используйте его так же, как и встроенные адаптеры Android, такие как SimpleCursorAdapter, с отображением строк (ключей ваших данных json) в целые числа (представления строк списка просмотра).

Для получения дополнительной информации см. Документацию SimpleAdapter .

2 голосов
/ 16 сентября 2010

ArrayAdapter<String> работает со строками.Вы не можете использовать его для JSONArray.

Я думаю, что вы должны реализовать пользовательский адаптер для списка.Попробуйте расширить один из подклассов ListAdapter или Google для «пользовательского адаптера списка».

JSONArray может содержать любой набор объектов (JSONObjects, другие JSONArrays, Strings, Booleans, Integer, Longs, Doubles, null или NULL)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...