简体   繁体   中英

How to use a listAdapter to display Array of Json values

For an Android application that I'm building for my internship, I'm trying to display a list of tickets from the current logged in user and display them in a ListView. Let me paste some of my code to let you see where I'm at currently:

    JSONArray finalResult = finalResultObject.getJSONArray(TAG_TICKETS);

    System.out.println("this is finalResult: " + finalResult);

    // creating new HashMap
    HashMap<String, String> map = new HashMap<String, String>();

    // adding each child node to HashMap key => value
    for (int i = 0; i < finalResult.length(); i++) {
        JSONObject c = finalResult.getJSONObject(i);

        if (c.has(TAG_CLIENT_NAME) && !c.isNull(TAG_CLIENT_NAME)) {
            String clientName = c.getString(TAG_CLIENT_NAME);
            map.put("client_name_map", clientName);
            // System.out.println(clientName);
        }
        if (c.has(TAG_PROJECT_NAME) && !c.isNull(TAG_PROJECT_NAME)) {
            String projectName = c.getString(TAG_PROJECT_NAME);
            map.put("project_name_map", projectName);
        }

        // adding HashList to ArrayList
        ticketList.add(map);
        // System.out.println(map);
    }

    ListAdapter adapter = new SimpleAdapter(SecondActivity.this, ticketList, R.layout.list_item, new String[] { "client_name_map", "project_name_map" }, new int[] { R.id.client_name,
            R.id.project_name });

    eventualListAdapter = adapter;

I've got a couple of prints in between, left them in there to let you guys see what I'm looking at right now. My problem is that I do get the required number of items, but it repeats the same item (so it does loop through the array, but doesn't update the values). I'm currently completely new to Android, and therefore still figuring out which kind of Adapters to use etc.

In the end I'm passing the adapter to eventualListAdapter, which I created within the main thread, so I can easily call it to update the UI (I'm not sure if this is anywhere near a clean way, just trying to get things working at this point)

Thanks in advance, Dennis

You are using the same HashMap instance for all Itens. Just move the HashMap creation to inside the loop:

            // adding each child node to HashMap key => value
            for (int i = 0; i < finalResult.length(); i++) {
                // creating new HashMap
                HashMap<String, String> map = new HashMap<String, String>();

                JSONObject c = finalResult.getJSONObject(i);

                if(c.has(TAG_CLIENT_NAME)&&!c.isNull(TAG_CLIENT_NAME)){
                    String clientName = c.getString(TAG_CLIENT_NAME);
                    map.put("client_name_map", clientName);
                    //System.out.println(clientName);
                }
                if(c.has(TAG_PROJECT_NAME)&&!c.isNull(TAG_PROJECT_NAME)){
                    String projectName = c.getString(TAG_PROJECT_NAME);
                    map.put("project_name_map", projectName);
                }

                // adding HashList to ArrayList
                ticketList.add(map);
                //System.out.println(map);
            }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM