cómo mostrar los datos json obtenidos en listview usando baseadapter

Soy nuevo en Android y Java. Últimamente tengo problemas para mostrar los datos json obtenidos en listview utilizando baseadapter. Al principio he usado este código

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); new TheTask().execute(); } class TheTask extends AsyncTask { @Override protected String doInBackground(Void... params) { String str = null; try { HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://10.0.2.2/BSDI/show.php"); HttpResponse response = httpclient.execute(httppost); str = EntityUtils.toString(response.getEntity()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return str; } @Override protected void onPostExecute(String result) { super.onPostExecute(result); String response = result.toString(); try { ArrayList stringArray = new ArrayList(); JSONArray new_array = new JSONArray(response); for(int i = 0, count = new_array.length(); i< count; i++) { try { JSONObject jsonObject = new_array.getJSONObject(i); stringArray.add(jsonObject.getString("title").toString()); } catch (JSONException e) { e.printStackTrace(); } } ArrayAdapter adapter = new ArrayAdapter (MainActivity.this,R.layout.test_tuh,stringArray); ListView list= (ListView) findViewById(R.id.listView1); list.setAdapter(adapter); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); //tv.setText("error2"); } } 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; } } 

Este código muestra los datos json obtenidos con éxito. Pero solo muestra una fila. Necesito más de una (dos) filas en la lista. Así que probé este código y no funciona, muestra una pantalla en blanco.

Mi código está abajo,

  class TheTask extends AsyncTask { @Override protected String doInBackground(Void... params) { String str = null; try { HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://10.0.2.2/BSDI/show.php"); HttpResponse response = httpclient.execute(httppost); str = EntityUtils.toString(response.getEntity()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return str; } @Override protected void onPostExecute(String result) { // TODO Auto-generated method stub super.onPostExecute(result); String response = result.toString(); try { arrayList=new ArrayList(); ArrayList stringArray = new ArrayList(); JSONArray new_array = new JSONArray(response); for(int i = 0, count = new_array.length(); i< count; i++) { try { JSONObject jsonObject = new_array.getJSONObject(i); stringArray.add(jsonObject.getString("title").toString()); } catch (JSONException e) { e.printStackTrace(); } } ListView listView; adap= new BaseAdapter() { LayoutInflater inflater=(LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); @Override public View getView(int position, View view, ViewGroup viewgroup) { if (view==null) { view=inflater.inflate(R.layout.bsdi, null); } TextView title_tuh=(TextView) view.findViewById(R.id.title1); TextView notice_tuh=(TextView) view.findViewById(R.id.notice1); title_tuh.setText(arrayList.get(position).getTitle()); notice_tuh=.setText(arrayList.get(position).getNotice()); return view; } @Override public long getItemId(int arg0) { // TODO Auto-generated method stub return 0; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return arrayList.get(position); } @Override public int getCount() { // TODO Auto-generated method stub return arrayList.size(); } }; listView=(ListView) findViewById(R.id.listView1); listView.setAdapter(adap); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); //tv.setText("error2"); } } 

Hasta donde me doy cuenta, el problema está aquí

 ArrayList stringArray = new ArrayList(); JSONArray new_array = new JSONArray(response); for(int i = 0, count = new_array.length(); i< count; i++) { try { JSONObject jsonObject = new_array.getJSONObject(i); stringArray.add(jsonObject.getString("title").toString()); } catch (JSONException e) { e.printStackTrace(); } } 

Hasta ahora, supongo que los datos json extraídos se almacenan en stringArray, pero no se usan más adelante. Si trato de usarlo así, me da error

 title_tuh.setText(stringArray .get(position).getTitle()); notice_tuh=.setText(stringArray .get(position).getNotice()); 

Si trato de no usar ArrayList stringArray = new ArrayList ();

y use
arrayList = new ArrayList (); en cambio, así también recibo un error.

  arrayList=new ArrayList(); JSONArray new_array = new JSONArray(response); //JSONArray jsonArray = new JSONArray(); for(int i = 0, count = new_array.length(); i< count; i++) { try { JSONObject jsonObject = new_array.getJSONObject(i); arrayList.add(jsonObject.getString("title").toString()); // String in = mInflater.inflate(R.layout.custom_row_view, null); } catch (JSONException e) { e.printStackTrace(); } } 

No puedo encontrar la manera de resolver este problema. He visto muchos tutoriales en línea, pero esos no fueron útiles para mí. Por favor, ayúdame.

Primero necesitas crear row_listitem.xml archivo row_listitem.xml como:

         

Ahora, necesitas crear Custom BaseAdapter como:

  public class BaseAdapter2 extends BaseAdapter { private Activity activity; // private ArrayList<HashMap<String, String>> data; private static ArrayList title,notice; private static LayoutInflater inflater = null; public BaseAdapter2(Activity a, ArrayList b, ArrayList bod) { activity = a; this.title = b; this.notice=bod; inflater = (LayoutInflater) activity .getSystemService(Context.LAYOUT_INFLATER_SERVICE); } public int getCount() { return title.size(); } public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { View vi = convertView; if (convertView == null) vi = inflater.inflate(R.layout.row_listitem, null); TextView title2 = (TextView) vi.findViewById(R.id.txt_ttlsm_row); // title String song = title.get(position).toString(); title2.setText(song); TextView title22 = (TextView) vi.findViewById(R.id.txt_ttlcontact_row2); // notice String song2 = notice.get(position).toString(); title22.setText(song2); return vi; } 

}

Ahora puedes configurar tu actividad principal como:

 public class MainActivity extends Activity { ArrayList title_array = new ArrayList(); ArrayList notice_array = new ArrayList(); ListView list; BaseAdapter2 adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); list = (ListView) findViewById(R.id.listView1); new TheTask().execute(); } class TheTask extends AsyncTask { @Override protected String doInBackground(Void... params) { String str = null; try { HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost( "http://10.0.2.2/BSDI/show.php"); HttpResponse response = httpclient.execute(httppost); str = EntityUtils.toString(response.getEntity()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return str; } @Override protected void onPostExecute(String result) { super.onPostExecute(result); String response = result.toString(); try { JSONArray new_array = new JSONArray(response); for (int i = 0, count = new_array.length(); i < count; i++) { try { JSONObject jsonObject = new_array.getJSONObject(i); title_array.add(jsonObject.getString("title").toString()); notice_array.add(jsonObject.getString("notice").toString()); } catch (JSONException e) { e.printStackTrace(); } } adapter = new BaseAdapter2(MainActivity.this, title_array, notice_array); list.setAdapter(adapter); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); // tv.setText("error2"); } } } } 

@Allen Chun, en realidad no está en mi mente actualmente lo que he cambiado en mi código para ejecutar mi código a la perfección. Pero estoy compartiendo todos mis códigos que funcionan perfectamente.

Es mi código de diseño,

       

Estos son mis códigos de diseño de vista de lista personalizados,

    />   

es mi actividad llamada “NoticeBoard”.

 public class NoticeBoard extends Activity { ArrayList title_array = new ArrayList(); ArrayList notice_array = new ArrayList(); ListView list; base_adapter3 adapter; TextView f,msg; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.list_notice); list = (ListView) findViewById(R.id.list_notice2); msg=(TextView) findViewById(R.id.err_msg); new test_ays().execute(); } class test_ays extends AsyncTask { @Override protected String doInBackground(Void... params) { String str = null ; try { HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://10.0.2.2/BSDI/show.php"); HttpResponse response = httpclient.execute(httppost); str = EntityUtils.toString(response.getEntity()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return str; } @Override protected void onPostExecute(String result) { super.onPostExecute(result); if(result!=null) // add this { String response = result.toString(); try { JSONArray new_array = new JSONArray(response); for (int i = 0, count = new_array.length(); i < count; i++) { try { JSONObject jsonObject = new_array.getJSONObject(i); title_array.add(jsonObject.getString("title").toString()); notice_array.add(jsonObject.getString("notice").toString()); } catch (JSONException e) { e.printStackTrace(); } } adapter = new base_adapter3(NoticeBoard.this, title_array, notice_array); list.setAdapter(adapter); // f=(TextView) findViewById(R.id.textTuh); // f.setText(title_array); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); // tv.setText("error2"); } } else{ msg.setText("You need a working data connection..."); } } } } 

Y son mis códigos de baseadapter personalizados,

 public class base_adapter2 extends BaseAdapter { private Activity activity; //private ArrayList<HashMap<String, String>> data; private static ArrayList title,notice; private static LayoutInflater inflater = null; public base_adapter2(Activity a, ArrayList b) { activity = a; this.title = b; // this.notice=bod; inflater = (LayoutInflater) activity .getSystemService(Context.LAYOUT_INFLATER_SERVICE); } public int getCount() { return title.size(); } public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { View vi = convertView; if (convertView == null) vi = inflater.inflate(R.layout.bsdi_adapter, null); TextView title2 = (TextView) vi.findViewById(R.id.txt1); // title String song = title.get(position).toString(); title2.setText(song); return vi; } } 

En este ejemplo, me estoy conectando a la URL JSON de la línea de tiempo pública de Twitters.

 package net.inchoo.demo.andy1; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.app.ListActivity; import android.os.Bundle; import android.widget.ArrayAdapter; public class HomeActivity extends ListActivity { /** Called when the activity is first created. */ @SuppressWarnings({ "rawtypes", "unchecked" }) @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); setListAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, this.fetchTwitterPublicTimeline())); } public ArrayList fetchTwitterPublicTimeline() { ArrayList listItems = new ArrayList(); try { URL twitter = new URL( "http://twitter.com/statuses/public_timeline.json"); URLConnection tc = twitter.openConnection(); BufferedReader in = new BufferedReader(new InputStreamReader( tc.getInputStream())); String line; while ((line = in.readLine()) != null) { JSONArray ja = new JSONArray(line); for (int i = 0; i < ja.length(); i++) { JSONObject jo = (JSONObject) ja.get(i); listItems.add(jo.getString("text")); } } } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } return listItems; } } 

Dirija su atención a listItems.add (jo.getString ("text")); línea. Esta es la parte en la que estoy obteniendo un atributo / propiedad de "texto" de un solo objeto JSON. Para obtener una imagen más "visual" de todos los atributos / propiedades disponibles, le recomendamos echar un vistazo a la versión XML de twitters public timeline. De esta forma obtendrás un bonito XML en color en tu navegador, donde podrás ver todos los atributos disponibles.

Enlace: http://inchoo.net/dev-talk/android-development/simple-android-json-parsing-example-with-output-into-listactivity/

Analizador Json:

 public class jparser { static InputStream istream = null; static JSONObject jObj = null; //static JSONArray jarray=null; static String json = ""; //static JSONArray jarray = null; // constructor public jparser() { } public JSONObject getJFromUrl(String url) { // Making HTTP request //try { // defaultHttpClient StringBuilder builder = new StringBuilder(); DefaultHttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(url); /*HttpResponse httpResponse = httpClient.execute(httpPost); HttpEntity httpEntity = httpResponse.getEntity(); istream = httpEntity.getContent();*/ try{ HttpResponse response = httpClient.execute(httpPost); StatusLine statusLine = response.getStatusLine(); int statusCode = statusLine.getStatusCode(); if (statusCode == 400) { HttpEntity entity = response.getEntity(); InputStream content = entity.getContent(); BufferedReader reader = new BufferedReader(new InputStreamReader(content)); String line; while ((line = reader.readLine()) != null) { builder.append(line); } } else { Log.e("==>", "Failed to download file"); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { BufferedReader reader = new BufferedReader(new InputStreamReader(istream, "iso-8859-1"), 8); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } istream.close(); json = sb.toString(); } catch (Exception e) { Log.e("Buffer Error", "Error converting result " + e.toString()); } // try parse the string to a JSON object try { jObj = new JSONObject(json); } catch (JSONException e) { Log.e("JSON Parser", "Error parsing data " + e.toString()); } // return JSON String return jObj; // Parse String to JSON object /*try { jarray = new JSONArray( builder.toString()); } catch (JSONException e) { Log.e("JSON Parser", "Error parsing data " + e.toString()); } // return JSON Object return jarray; }*/ } } 
  public class JSONParser { static InputStream is = null; static JSONObject jObj = null; static String json = ""; // constructor public JSONParser() { } // function get json from url // by making HTTP POST or GET mehtod @SuppressLint("NewApi") public JSONObject makeHttpRequest(String url, String method, List params) { // Making HTTP request try { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); // check for request method if(method == "POST"){ // request method is POST // defaultHttpClient DefaultHttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(url); httpPost.setEntity(new UrlEncodedFormEntity(params)); HttpResponse httpResponse = httpClient.execute(httpPost); HttpEntity httpEntity = httpResponse.getEntity(); is = httpEntity.getContent(); }else if(method == "GET"){ // request method is GET DefaultHttpClient httpClient = new DefaultHttpClient(); String paramString = URLEncodedUtils.format(params, "utf-8"); url += "?" + paramString; HttpGet httpGet = new HttpGet(url); HttpResponse httpResponse = httpClient.execute(httpGet); HttpEntity httpEntity = httpResponse.getEntity(); is = httpEntity.getContent(); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { BufferedReader reader = new BufferedReader(new InputStreamReader( is, "iso-8859-1"), 8); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } is.close(); json = sb.toString(); } catch (Exception e) { Log.e("Buffer Error", "Error converting result " + e.toString()); } // try parse the string to a JSON object try { jObj = new JSONObject(json); } catch (JSONException e) { Log.e("JSON Parser", "Error parsing data " + e.toString()); } // return JSON String return jObj; } } 

Model

public class WorkModel { public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getImagename() { return imagename; } public void setImagename(String imagename) { this.imagename = imagename; } String id,name,imagename; public WorkModel(String s1,String s2,String s3) { this.id=s1; name=s2; imagename=s3; } }

listview fill

public class Work_in_process extends Fragment { //////////////jsonparser implement JSONParser jsonparser=new JSONParser(); JSONArray json_users=null; JSONObject json; ///////// ListView lst; ArrayList data=new ArrayList(); WorkAdapter adapter; Context con; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_work_in_process, container, false); con=this.getActivity(); lst=(ListView)rootView.findViewById(R.id.work_listview); new work_process().execute(); // Inflate the layout for this fragment return rootView; } class work_process extends AsyncTask { public Dialog pDialog; @Override protected void onPreExecute() { super.onPreExecute(); pDialog = new ProgressDialog(con); pDialog.setMessage("Loading... Please wait..."); pDialog.setIndeterminate(true); pDialog.setCancelable(true); pDialog.show(); } @Override protected String doInBackground(String... args) { data.clear(); List params = new ArrayList(); json = jsonparser.makeHttpRequest("your url","POST", params); try { int success = json.getInt("status"); if (success == 0) { return "kbc"; } else { json_users = json.getJSONArray("result"); // looping through All Products for (int i = 0; i < json_users.length(); i++) { JSONObject c = json_users.getJSONObject(i); String t1 = c.getString("id"); String t2 = c.getString("work_title"); String t3 = c.getString("image_path"); WorkModel da=new WorkModel(t1,t2,t3); data.add(da); } return "abc"; } } catch (JSONException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); pDialog.dismiss(); if(s.equals("abc")) { adapter = new WorkAdapter(con, data); lst.setAdapter(adapter); adapter.notifyDataSetChanged(); } else { } } } }

Adapter fill listview

public class WorkAdapter extends BaseAdapter { private LayoutInflater inflater1=null; private static String string=null; ArrayList data=null; Context activity; DisplayImageOptions options; protected ImageLoader imageLoader = ImageLoader.getInstance(); public WorkAdapter(Context act,ArrayList da) { activity=act; data=da; } @Override public int getCount() { return data.size(); } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View vi=convertView; if(convertView==null) { inflater1=(LayoutInflater)parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); vi=inflater1.inflate(R.layout.list_work,null); } TextView name; ImageView img; name=(TextView)vi.findViewById(R.id.list_work_name); img= (ImageView)vi.findViewById(R.id.list_work_img); WorkModel da=new WorkModel(string,string,string); da=data.get(position); final String p1,p2,p3; p1=da.getId(); p2=da.getName(); p3=da.getImagename(); name.setText(p2); imageLoader.init(ImageLoaderConfiguration.createDefault(activity)); final String imgpath=""+p3; options = new DisplayImageOptions.Builder() .showImageOnLoading(R.drawable.wp_loading) .showImageForEmptyUri(R.drawable.wp_loading) .showImageOnFail(R.drawable.wp_loading) .cacheInMemory(true) .cacheOnDisk(true) .build(); imageLoader.displayImage(imgpath, img,options); img.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { DisplayImageOptions options; final ImageLoader imageLoader = ImageLoader.getInstance(); final Dialog emailDialog =new Dialog(activity, android.R.style.Theme_DeviceDefault); emailDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); emailDialog.setCancelable(true); emailDialog.setContentView(R.layout.zoom_imge); ImageView image = (ImageView) emailDialog.findViewById(R.id.zoom_image_img); emailDialog.show(); final String imgpath=""+p3; options = new DisplayImageOptions.Builder() .showImageOnLoading(R.drawable.wp_loading) .showImageForEmptyUri(R.drawable.wp_loading) .showImageOnFail(R.drawable.wp_loading) .cacheInMemory(true) .cacheOnDisk(true) .build(); imageLoader.displayImage(imgpath, image, options); } }); return vi; } }

Obtener horario

 public class GetSchedule extends Activity { // JSON Node Names private static final String TAG_SNO = "sno"; private static final String TAG_STNCODE = "stnCode"; private static final String TAG_STATION = "station"; // private static final String TAG_ROUTENO= "routeNo"; private static final String TAG_ARRIVALTIME = "arrivalTime"; private static final String TAG_DEPTIME = "depTime"; private JSONArray station = null; private ListView list; //private static String url = "http://railpnrapi.com/api/route/train/"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_get_schedule); try { ArrayList> stnNamelist = new ArrayList>(); // Getting JSON Array // JSONObject job = new JSONObject(); //JSONArray jArray = ModuleClass.trainScheduleJSONObject.getJSONArray("stnName"); JSONObject json_data = null; station= ModuleClass.trainScheduleJSONObject.getJSONArray(TAG_STATION); for (int i = 0; i < station.length(); i++) { json_data = station.getJSONObject(i); // JSONObject c = stnName.getJSONObject(0); // Storing JSON item in a Variable String sno = json_data.getString(TAG_SNO); String stnCode = json_data.getString(TAG_STNCODE); // String distance= c.getString(TAG_DISTANCE); // String routeNo = c.getString(TAG_ROUTENO); String arrivalTime = json_data.getString(TAG_ARRIVALTIME); String depTime = json_data.getString(TAG_DEPTIME); // String haltTime = c.getString(TAG_HALTTIME); // String tday= c.getString(TAG_TDAY); // String remark = c.getString(TAG_REMARK); // Adding value HashMap key => value stnNamelist = new ArrayList>(); HashMap map = new HashMap(); map.put(TAG_SNO, sno); map.put(TAG_STNCODE, stnCode); map.put(TAG_DEPTIME, depTime); map.put(TAG_ARRIVALTIME, arrivalTime); // map.put(TAG_DEPTIME,depTime ); stnNamelist.add(map); list = (ListView) findViewById(R.id.listView1); final SimpleAdapter sd; sd = new SimpleAdapter(this, stnNamelist, R.layout.activity_get_schedule, new String[] { TAG_SNO, TAG_STNCODE, TAG_ARRIVALTIME, TAG_DEPTIME }, new int[] { R.id.textView1, R.id.textView2, R.id.textView3, R.id.textView4}); list.setAdapter(sd); /* * list.setOnItemClickListener(new * AdapterView.OnItemClickListener() { * * @Override public void onItemClick(AdapterView parent, View * view, int position, long id) { Toast.makeText( * MainActivity.this, "You Clicked at " + * stnNamelist.get(+position).get( "name"), Toast.LENGTH_SHORT) * .show(); } }); */ } // Set JSON Data in TextView // uid.setText(id); // name1.setText(name); // email1.setText(email); } catch (JSONException e) { e.printStackTrace(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.get_schedule, menu); return true; } } 

ListView de los datos JSON obtenidos mediante el servicio Retrofit2

Respuesta JSON

 { "results": [ { "phone": "+9178XXXX66", "name": "Olivia" }, { "phone": "+9178XXXX66", "name": "Isla" }, { "phone": "+9178XXXX66", "name": "Emily" }, { "phone": "+9178XXXX66", "name": "Amelia" }, { "phone": "+9178XXXX66", "name": "Sophia" }], "statusCode": "1", "count": "2" } 

enter image description here

En MainActivity.java pasaremos datos JSON como ArrayList ( dummyData )

  customListAdapter = new CustomListAdapter(getApplicationContext(), dummyData); listView = (ListView) findViewById(R.id.listShowJSONData); listView.setAdapter(customListAdapter); 

En BaseAdapter personalizado nuestro

 ... ... @Override public MyModel getItem(int i) { return this.users.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(final int i, View view, ViewGroup viewGroup) { if(view==null) { view= LayoutInflater.from(c).inflate(R.layout.json_data_list,viewGroup,false); } TextView mUserDetails = (TextView) view.findViewById(R.id.userDetails); TextView mUserStatus = (TextView) view.findViewById(R.id.userStatus); Object getrow = this.users.get(i); LinkedTreeMap rowmap = (LinkedTreeMap) getrow; String name = rowmap.get("name").toString(); String phone = rowmap.get("phone").toString(); mUserDetails.setText(name); mUserStatus.setText(phone); return view; } ... ... 

Aquí MyModel se utilizará como modelo de mapeo personalizado de respuesta que obtendremos del servicio

Ver enlace para la explicación completa del código