通过适配器将JSONArray显示到ListView

时间:2018-12-02 18:40:12

标签: java android

我有一个JSONarray,其中包含带有名称和定向参数的JSON对象,我想在ListView中对其进行显示。 (全部在try catch块中)。

//A partir del string que contiene el JSON crearemos un Objeto JSON que contendrá la cadena
        JSONObject obj = new JSONObject(loadJSONFromAsset(this));

        //Creamos un JSONArray que contiene varios objetos JSON
        JSONArray m_jArry = obj.getJSONArray("librerias");

        ArrayList<HashMap<String, String>> formList = new ArrayList<HashMap<String, String>>();
        HashMap<String, String> m_li;

        for (int i = 0; i < m_jArry.length(); i++) {
            JSONObject jo_inside = m_jArry.getJSONObject(i);
            //Log.d("Details-->", jo_inside.getString("formule"));
            String formula_value = jo_inside.getString("Nombre");
            String url_value = jo_inside.getString("Direccion");

            //Add your values in your `ArrayList` as below:
            m_li = new HashMap<String, String>();
            m_li.put("Nombre", formula_value);
            m_li.put("Direccion", url_value);

            formList.add(m_li);
        }

然后我创建一个包含JSONarray的ArrayAdapter

//El ArrayAdapter hace de intermediario entre la ListView y el DataSource
        ArrayAdapter<HashMap<String, String>> adapter = new ArrayAdapter<HashMap<String, String>>(this, android.R.layout.simple_list_item_1, formList);

当我将信息显示到ListView中时,问题就来了,它显示了类似JSONArray格式的信息,并且我想选择如何显示信息。这是可能的?

listView.setAdapter(adapter);

在ListView的输出中,我以相同的格式接收该信息:

{Nombre:Libreria Jose,Direccion:Calle Gran de Sant Andreu 382}

{Nombre:Libreria Jose,Direccion:Calle Compte d'Urgell 171}

全部收尾!

2 个答案:

答案 0 :(得分:0)

好吧,先列出一个简单的列表

List<String> list = new ArrayList<String>();

然后遍历当前HashMap中所有formList项,并根据需要listkey value

for (HashMap<String, String> map : formList)
    for (Entry<String, String> mapEntry : map.entrySet())
        {
        String key = mapEntry.getKey();
        String value = mapEntry.getValue();
        //if you need only keys to display in the listview
        list.add(key);
        }

然后将该列表作为更简单的数据源提供给您的适配器

ArrayAdapter<List<String>> adapter = new ArrayAdapter<List<String>>(this, android.R.layout.simple_list_item_1, list);

最终设置适配器

listView.setAdapter(adapter);

答案 1 :(得分:0)

如果只想显示名称,则可以创建List<String>而不是哈希图的ArrayAdapter,请考虑使用以下代码:

//A partir del string que contiene el JSON crearemos un Objeto JSON que contendrá la cadena
        JSONObject obj = new JSONObject(loadJSONFromAsset(this));

        //Creamos un JSONArray que contiene varios objetos JSON
        JSONArray m_jArry = obj.getJSONArray("librerias");


        List<String> m_li = new ArrayList();

        for (int i = 0; i < m_jArry.length(); i++) {
            JSONObject jo_inside = m_jArry.getJSONObject(i);
            //Log.d("Details-->", jo_inside.getString("formule"));
            String formula_value = jo_inside.getString("Nombre");
            String url_value = jo_inside.getString("Direccion");

            //Add your values in your `ArrayList` as below:
            m_li.add(formula_value);
        }

将列表提供为阵列适配器的数据源,并将适配器设置为listview:

ArrayAdapter<List<String>> adapter = new ArrayAdapter<List<String>>(this, android.R.layout.simple_list_item_1, m_li);

listview.setAdapter(adapter);