user3185930
user3185930

Reputation: 45

JSON to listView in android

I'm trying to put JSON to ListView. I am getting data from http://api.androidhive.info/contacts/ (only using the name field) I am able to get them to array, but im unable to put them into the list,

[NOTE] however the ListView makes exactly 13 lines for 13 entries (number of names) but the lines are blank.

private class GetJidla extends AsyncTask<Void, Void, Void> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        // Showing progress dialog
        pDialog = new ProgressDialog(TableMenuActivity.this);
        pDialog.setMessage("Please wait...");
        pDialog.setCancelable(false);
        pDialog.show();

    }

    @Override
    protected Void doInBackground(Void... arg0) {
        // Creating service handler class instance
        ServiceHandler sh = new ServiceHandler();

        // Making a request to url and getting response
        String jsonStr = sh.makeServiceCall(url, ServiceHandler.GET);

        Log.d("Response: ", "> " + jsonStr);

        if (jsonStr != null) {
            try {
                JSONObject jsonObj = new JSONObject(jsonStr);

                // Getting JSON Array node
                jidla = jsonObj.getJSONArray(TAG_CONTACTS);

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

                  //  String id = c.getString(TAG_ID);
                    String name = c.getString(TAG_NAME);


                    // tmp hashmap for single contact
                    HashMap<String, String> contact = new HashMap<String, String>();

                    // adding each child node to HashMap key => value
                  //  contact.put(TAG_ID, id);
                    contact.put(TAG_NAME, name);


                    // adding contact to contact list
                    jidlaList.add(contact);

                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        } else {
            Log.e("ServiceHandler", "Couldn't get any data from the url");
        }



        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        // Dismiss the progress dialog
        if (pDialog.isShowing())
            pDialog.dismiss();
        /**
         * Updating parsed JSON data into ListView
         * */
        ListAdapter adapter = new SimpleAdapter(
                TableMenuActivity.this, jidlaList,
                android.R.layout.simple_list_item_1, new String[] {TAG_NAME}, new int[] {android.R.id.list,
                         });

        menu = (ListView)findViewById(android.R.id.list);
        menu.setAdapter(adapter); 

    } 

and the list is here

<ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dip" >



    </ListView>

i need it to be on one screen, in one activity here is the image, the brown lsit is where i need it

Image

Upvotes: 2

Views: 20158

Answers (2)

DEVARAJ JOHNSON
DEVARAJ JOHNSON

Reputation: 235

Here is the very simple example for json to list view

http://www.androidhive.info/2012/01/android-json-parsing-tutorial/

download the project and use your own service in MainActivity.java

replace the service URl with your url and format your array accordingly thatz it

happy coding.

Upvotes: 0

SavinienL
SavinienL

Reputation: 191

I have an exemple to do that:

public class MainActivity extends Activity {
     //json string
     private String jsonString = "{\"employee\":[{\"emp_name\":\"employee1\",\"emp_no\":\"101700\"},{\"emp_name\":\"employee2\",\"emp_no\":\"101701\"},{\"emp_name\":\"employee3\",\"emp_no\":\"101702\"},"+
            "{\"emp_name\":\"employee4\",\"emp_no\":\"101703\"},{\"emp_name\":\"employee5\",\"emp_no\":\"101704\"},{\"emp_name\":\"employee6\",\"emp_no\":\"101705\"},"+
            "{\"emp_name\":\"employee7\",\"emp_no\":\"101706\"},{\"emp_name\":\"employee8\",\"emp_no\":\"101707\"},{\"emp_name\":\"employee9\",\"emp_no\":\"101708\"},"+
            "{\"emp_name\":\"employee10\",\"emp_no\":\"101709\"},{\"emp_name\":\"employee11\",\"emp_no\":\"101710\"},{\"emp_name\":\"employee12\",\"emp_no\":\"101711\"},"+
            "{\"emp_name\":\"employee13\",\"emp_no\":\"101712\"},{\"emp_name\":\"employee14\",\"emp_no\":\"101713\"},{\"emp_name\":\"employee15\",\"emp_no\":\"101712\"}]}";
     @Override
     protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      initList();
      ListView listView = (ListView) findViewById(R.id.listView1);
      SimpleAdapter simpleAdapter = new SimpleAdapter(this, employeeList, android.R.layout.simple_list_item_1, new String[] {"employees"}, new int[] {android.R.id.text1});
      listView.setAdapter(simpleAdapter);
     }

     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.main, menu);
      return true;
     }

     List<Map<String,String>> employeeList = new ArrayList<Map<String,String>>();
     private void initList(){

      try{
       JSONObject jsonResponse = new JSONObject(jsonString);
       JSONArray jsonMainNode = jsonResponse.optJSONArray("employee");

      for(int i = 0; i<jsonMainNode.length();i++){
       JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
       String name = jsonChildNode.optString("emp_name");
       String number = jsonChildNode.optString("emp_no");
       String outPut = name + "-" +number;
       employeeList.add(createEmployee("employees", outPut));
      }
     }
      catch(JSONException e){
       Toast.makeText(getApplicationContext(), "Error"+e.toString(), Toast.LENGTH_SHORT).show();
      }
     }

     private HashMap<String, String>createEmployee(String name,String number){
      HashMap<String, String> employeeNameNo = new HashMap<String, String>();
      employeeNameNo.put(name, number);
      return employeeNameNo;
     }

    }

I use this code and it works fine!

Code from JSON Exemple

Upvotes: 2

Related Questions