Android: how to sort data for ListView?

I have JSON data that I am dumping from the server. One of the fields in this data is the distance value. I need the data to be sorted by distance from lowest to highest in the ListView. I'm not sure how to do this?

Any help is appreciated.

Is this my code for capturing data not sure how to sort it correctly?

// Hashmap for ListView
ArrayList<HashMap<String, String>> bathroomList = new ArrayList<HashMap<String, String>>();


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 
    setContentView(R.layout.activity_search);
    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.window_title);

    // Creating JSON Parser instance
    JSONParser jParser = new JSONParser();

    // getting JSON string from URL
    JSONObject json = jParser.getJSONFromUrl(url);

    try {
        // Getting Array of Contacts
        bathrooms = json.getJSONArray(TAG_BATHROOMS);

        // looping through All Contacts
        for(int i = 0; i < bathrooms.length(); i++){
            JSONObject c = bathrooms.getJSONObject(i);


            // Storing each json item in variable
            String id = c.getString(TAG_ID);
            String access = c.getString(TAG_ACCESS);
            String city = c.getString(TAG_CITY);
            String comment = c.getString(TAG_COMMENT);
            String directions = c.getString(TAG_DIRECTIONS);
            String name = c.getString(TAG_NAME);
            String street = c.getString(TAG_STREET);
            String bathroomtype = c.getString(TAG_BATHROOMTYPE);                
            String distance = c.getString(TAG_DISTANCE);
            String distanceTrimmed = distance.substring(0,4) + " " + "miles away";
            String avail = c.getString(TAG_AVAIL);
            String country = c.getString(TAG_COUNTRY);
            String state = c.getString(TAG_STATE);
            String postal = c.getString(TAG_POSTAL);

            //System.out.println(name);

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

            // adding each child node to HashMap key => value
            map.put(TAG_ID, id);
            map.put(TAG_ACCESS, access);
            map.put(TAG_CITY, city);
            map.put(TAG_COMMENT, comment);
            map.put(TAG_DIRECTIONS, directions);
            map.put(TAG_NAME, name);
            map.put(TAG_STREET, street);
            map.put(TAG_BATHROOMTYPE, bathroomtype);
            map.put(TAG_DISTANCE, distanceTrimmed);
            map.put(TAG_AVAIL, avail);
            map.put(TAG_COUNTRY, country);
            map.put(TAG_STATE, state);
            map.put(TAG_POSTAL, postal);

            // adding HashList to ArrayList
            bathroomList.add(map);
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }


    /**
     * Updating parsed JSON data into ListView
     * */

    ListAdapter adapter = new SimpleAdapter(this, bathroomList,
            R.layout.list_item,
            new String[] { TAG_ID, TAG_NAME, TAG_STREET, TAG_CITY, TAG_STATE, TAG_POSTAL,TAG_COUNTRY, TAG_DISTANCE, TAG_DIRECTIONS, TAG_COMMENT, TAG_AVAIL, TAG_BATHROOMTYPE, TAG_ACCESS}, new int[] {
                     R.id.key,R.id.name, R.id.street, R.id.city, R.id.state, R.id.postal,R.id.country, R.id.distance, R.id.directions, R.id.comments, R.id.availability, R.id.bathroomtype, R.id.access });

    setListAdapter(adapter);

      

+1


source to share


2 answers


Sorting the list using Collections.sort()

a special comparator.



Collections.sort(bathroomList, new Comparator<HashMap<String, String>>()
{
    @Override
    public int compare(HashMap<String, String> a, HashMap<String, String> b)
    {
        return a.get(TAG_DISTANCE).compareTo(b.get(TAG_DISTANCE));
    }
});

      

+4


source


same problem with mine, but now i get it working, thanks to @rusmus. Have a look at Sorting Double Data (Distance) in ListView

Try this code:



Collections.sort(bathroomList, new Comparator<HashMap<String, String>>() {

                    @Override
                    public int compare(HashMap<String, String> o1,
                            HashMap<String, String> o2) {                           
                        return Double.compare(Double.parseDouble(o1.get(TAG_DISTANCE)), Double.parseDouble(o2.get(TAG_DISTANCE))); // error
                    }                   
                });

      

+2


source







All Articles