gosulove gosulove - 2 months ago 35
Android Question

Android convert JSONObject to HashMap and display in ListView with SimpleAdapter

I try to search converting

JSONObject
to
HashMap
but most of the results are for Java not Android. Hence, I hope someone can share if you have experience in doing this before.

listview_with_simpleAdapter_and_hashmap.java

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main4);
String[] food_id= new String[]{"1", "2", "3"};
String[] food_name = new String[]{"apple", "orange", "banana"};
List<HashMap<String, String>> aList = new ArrayList<HashMap<String, String>>();

for (int i = 0; i < 3; i++) {
HashMap<String, String> hm = new HashMap<String, String>();
hm.put("ID", food_id[i]);
hm.put("Name", food_name[i]);
aList.add(hm);
}

String[] from = {"ID", "Name"};
int[] to = {R.id.text_id, R.id.text_name};
SimpleAdapter adapter = new SimpleAdapter(this, aList, R.layout.list_item, from, to);
ListView listView = (ListView) findViewById(R.id.listView);
listView.setAdapter(adapter);

}


this file is working fine and simply display 2 columns in each row;

enter image description here

json.java

TextView mTxtDisplay;
String url = "http://192.168.1.103/web_service/omg.php/";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTxtDisplay = (TextView) findViewById(R.id.tv);

JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {

@Override
public void onResponse(JSONObject response) {
mTxtDisplay.setText(response.toString());
}
}, new Response.ErrorListener() {

@Override
public void onErrorResponse(VolleyError error) {
// TODO Auto-generated method stub
}
});
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(jsObjRequest);


192.168.1.103/web_service/omg.php/

{
"32":"Western Food",
"35":"Japanese Food",
"37":"Italian Food"
}


JSON is working fine as well. The format is exactly the same as the
ListView
data -> ID and Name.

So my question is how to convert the
JSONObject
in omg.php to listview_with_simpleAdapter_and_hashmap.java ? I just need a simple example.

Answer

You could do something like this:

ListView listView = (ListView) findViewById(R.id.listView);

// ...

@Override
public void onResponse(JSONObject response) {
    List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();

    try {
        Iterator<String> iterator = response.keys();

        while (iterator.hasNext()) {
            String key = iterator.next();
            String value = response.getString(key);

            HashMap<String, String> map = new HashMap<>();
            map.put(KEY_ID, key);
            map.put(KEY_NAME, value);

            list.add(map);
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }

    if(list.size() > 0) {
        String[] from = {KEY_ID, KEY_NAME};
        int[] to = {R.id.text_id, R.id.text_name};

        SimpleAdapter adapter = new SimpleAdapter(MainActivity.this, list,
            R.layout.list_item, from, to);

        listView.setAdapter(adapter);
    }
}
Comments