package com.example.theappguruz.jsonparsingdemoandroid.activity; import android.app.ProgressDialog; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v7.app.ActionBarActivity; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import com.android.volley.DefaultRetryPolicy; import com.android.volley.Request; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.StringRequest; import com.android.volley.toolbox.Volley; import com.example.theappguruz.jsonparsingdemoandroid.R; import com.example.theappguruz.jsonparsingdemoandroid.constant.Constants; import com.example.theappguruz.jsonparsingdemoandroid.model.ContactModel; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; public class MainActivity extends ActionBarActivity { private ProgressDialog progressDialog; android.widget.LinearLayout parentLayout; private Handler handler = new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { if (progressDialog != null && progressDialog.isShowing()) progressDialog.dismiss(); if (msg.what == 1) { displayContactList(); } else if (msg.what == 2) { Toast.makeText(getApplicationContext(), "JSON Error", Toast.LENGTH_LONG); } else { Toast.makeText(getApplicationContext(), "Null Pointer Exception", Toast.LENGTH_LONG); } return false; } }); ArrayList<ContactModel> jsonContacts = new ArrayList<ContactModel>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); parentLayout = (LinearLayout) findViewById(R.id.parentLayout); callContactAPI(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } private void callContactAPI() { progressDialog = ProgressDialog .show(this, "", getString(R.string.loading)); Log.d("JSON", "ContactAPI"); StringRequest stringRequest = new StringRequest(Request.Method.GET, Constants.URL_CONTACTS, new Response.Listener<String>() { @Override public void onResponse(final String responseString) { new Thread(new Runnable() { @Override public void run() { try { JSONObject jsonObject = new JSONObject(responseString); Log.d("JSON", "JSON"); if (jsonObject.has(Constants.TAG_PAYLOAD)) { JSONArray contacts = jsonObject.getJSONArray(Constants.TAG_PAYLOAD); for (int i = 0; i < contacts.length(); i++) { JSONObject contact = contacts.getJSONObject(i); ContactModel contactModel = new ContactModel(); contactModel.setAddress(contact.getString(Constants.TAG_ADDRESS)); contactModel.setFirstName(contact.getString(Constants.TAG_FIRST_NAME)); contactModel.setLastName(contact.getString(Constants.TAG_LAST_NAME)); contactModel.setDOB(contact.getString(Constants.TAG_DOB)); contactModel.setAvatar(contact.getString(Constants.TAG_AVATAR)); JSONObject phoneObject = contact.getJSONObject(Constants.TAG_PHONE); contactModel.setMobile(phoneObject.getString(Constants.TAG_PHONE_MOBILE)); contactModel.setHome(phoneObject.getString(Constants.TAG_PHONE_HOME)); contactModel.setOffice(phoneObject.getString(Constants.TAG_PHONE_OFFICE)); jsonContacts.add(contactModel); } } handler.sendEmptyMessage(1); } catch (JSONException e) { handler.sendEmptyMessage(2); e.printStackTrace(); } catch (NullPointerException e) { handler.sendEmptyMessage(3); e.printStackTrace(); } } }).start(); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { error.printStackTrace(); } }) { @Override protected Map<String, String> getParams() { Map<String, String> params = new HashMap<String, String>(); Log.d("JSON", "getParams"); // params.put("Contacts", "Contacts"); return params; } }; stringRequest.setRetryPolicy(new DefaultRetryPolicy( Constants.TIMEOUT_IN_MS, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); Volley.newRequestQueue(this).add(stringRequest); } private void displayContactList() { for (int i = 0; i < jsonContacts.size(); i++) { final ContactModel contactModel = jsonContacts.get(i); Holder holder = new Holder(); View view = LayoutInflater.from(this).inflate(R.layout.inflate_contact, null); final com.rey.material.widget.LinearLayout inflateParentView = (com.rey.material.widget.LinearLayout) view.findViewById(R.id.inflateParentView); holder.tvName = (TextView) view.findViewById(R.id.tvName); view.setTag(i); holder.tvName.setText(contactModel.getFirstName()); inflateParentView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this, ContactDetailActivity.class); intent.putExtra("ContactDetail", contactModel); startActivity(intent); } }); parentLayout.addView(view); } } private class Holder { TextView tvName; } }