Llenar listview con datos de una DB usando web service (PHP)

6,245 views
Skip to first unread message

Celeste ortiz vega

unread,
Nov 29, 2013, 1:19:33 AM11/29/13
to desarrollad...@googlegroups.com
Hola buenas noches, estoy intentando llenar un listview que me muestre unas listas de reproduccion guardadas en una BD local usando php como intermedio, pero no entiendo como hacerlo ya estuve buscando mucha información, leyendo debates aqui en el grupo y no me queda claro. Ya hice un login y me funciona muy bien usando el archivo php. Entiendo que la manera de hacerlo es esta:

-Crear un servicio rest en php que devuelva los datos (ese ya lo tengo y lo use para mi login, pero nose como definir la consulta para el listview)

-Desde android te conectas al servidor web que tiene el servicio y lees los datos

-Luego esos datos se pones en un arreglo y asi se vinculan al list view para mostrarlo.

Ya intente hacerlo mentiendole los datos en el mismo array para ir conociendo como funciona el listview:

public class Listas extends Activity {
    /** Called when the activity is first created. */
    private String listas[]={"Movidas", "Instrumentales", "RockPop", "Rock"};
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listas);
       
        ListView lista=(ListView) findViewById(R.id.listListas);
        ArrayAdapter<String> adaptador = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,listas);
        lista.setAdapter(adaptador);

}
}

Pero de ahi nose como hacerlo extrayendo los datos de la BD, me podrian dar una referencia algun tutorial o ponerme un ejemplo? De verdad lo necesito y les agredeceria su ayuda es para un trabajo escolar.


Gracias por su atención.


Juan de Dios Maldonado Sánchez

unread,
Nov 29, 2013, 3:21:59 AM11/29/13
to desarrollad...@googlegroups.com
Todo lo siguiente en un hilo o tarea nueva:
1. Solicitas la lista de datos a tu servidor Web y los metes en un array (o estructura que quieras)
2. Creas un Adaptador nuevo asignándole el array con los datos que has cargado.
3. Teniendo una referencia al ListView, le estableces el nuevo adaptador con setAdapter.

y Listo!


2013/11/29 Celeste ortiz vega <ccov...@gmail.com>

--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/20KhL
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a desarrolladores-a...@googlegroups.com.
Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.
Para ver este debate en la Web, visita https://groups.google.com/d/msgid/desarrolladores-android/8d6a6e6f-d51a-48fb-9739-749d5fd0e7dc%40googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.

Celeste ortiz vega

unread,
Nov 29, 2013, 9:28:25 PM11/29/13
to desarrollad...@googlegroups.com
Hola, gracias por la respuesta, el problema es que nose como poner esos datos en el array, le pongo el nombre de la variable de mi php? o me podran poner algun ejemplo porfavor?? Tengo conflicto en esa parte del array, como se ponen los datos, con comas? a que datos corresponderian del php por ejemplo me compartio un amigo su codigo de php donde hace la consulta:

$con=mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
$sql = "select nombreLista, descripcion from listasreprod";
$result = mysql_query($sql);
$json = array();

if(mysql_num_rows($result)){
while($row=mysql_fetch_assoc($
result)){
$json[]=$row;
}
}
mysql_close($con);
echo json_encode($json);

}

Como paso el resultado de la busqueda al array??

Es decir pondria esto:    private String listas[]={"Movidas", "Instrumentales", "RockPop", "Rock"};     pero en ves de Movidas, intrumental... que pongo? jason???

--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/20KhL
---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a desarrolladores-android+unsub...@googlegroups.com.

Juan de Dios Maldonado Sánchez

unread,
Nov 30, 2013, 4:03:36 AM11/30/13
to desarrollad...@googlegroups.com
Deberías "parsear" todo el texto (String) que recibes de tu petición PHP a un objeto JSONObject, y luego recorrer el contenido del mismo utilizando los métodos que ofrece, así vas tomando los valores de las columnas que solicitaste en tu consulta SQL en PHP.

Aquí tienes un tutorial (inglés):

Busca información sobre JSONObjet y JSONReader.

Saludos.


2013/11/30 Celeste ortiz vega <ccov...@gmail.com>
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a desarrolladores-a...@googlegroups.com.

Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.

xerex

unread,
Dec 2, 2013, 12:16:24 PM12/2/13
to desarrollad...@googlegroups.com
Hola buenas tardes Celeste:
Mira hace poco hice este ejercicio y el enlace que te ha dicho juande  y en este tambien te lo explican muy bien http://www.sgoliver.net/blog/?p=2665 de este precisamente te dejo el ejemplo que yo hice de  la consulta a la base de datos y mostrar los resultados en un listview, funciona bien 

public class MainActivity extends Activity {
 
private String  jsonResult;
private String url = "DIRECCION DEL SERVIDOR LOCAL";
private ListView listView;
private String[] clientes;
String nombre;
String apellido;
String apodo;
String telef;
 
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mostrar tarea=new mostrar();
tarea.execute();
  
}
private class mostrar extends AsyncTask<String,Integer,Boolean> {
        
   protected Boolean doInBackground(String... params) {
           
    boolean resul = true;
       
       HttpClient httpClient = new DefaultHttpClient();
           
           HttpPost del = new HttpPost("http://192.168.56.1/pruebaservice/prueba.php");         
           del.setHeader("content-type", "application/json");
           
           try
   {                        
           HttpResponse resp = httpClient.execute(del);
           String respStr = EntityUtils.toString(resp.getEntity());
           JSONArray respJSON = new JSONArray(respStr);
           clientes = new String[respJSON.length()];           
           for(int i=0; i<respJSON.length(); i++)
           {
                   JSONObject obj = respJSON.getJSONObject(i);
                   
                   
                   nombre = obj.getString("nombre");
                   apellido = obj.getString("apellido");
                   apodo = obj.getString("apodo");
                   telef = obj.getString("telefono");
                   
                   clientes[i] = "" + nombre + "-" + apellido + "-" + apodo + "" + telef;
           }
   }
   catch(Exception ex)
   {
           Log.e("ServicioRest","Error!", ex);
           resul = false;
   }

   return resul;
       
   }
   
   protected void onPostExecute(Boolean result) {
           
           if (result)
           {
                   //Rellenamos la lista con los nombres de los clientes
                   //Rellenamos la lista con los resultados
               ArrayAdapter<String> adaptador =
                           new ArrayAdapter<String>(MainActivity.this,
                               android.R.layout.simple_list_item_1, clientes);
               listView=(ListView)findViewById(R.id.listView1);        
               listView.setAdapter(adaptador);
           
             
           }
   }
   
   
}
}

Espero que te sirva a mi me funciona perfectamente

Un Saludo

Harol Higuera

unread,
Mar 2, 2014, 9:28:02 AM3/2/14
to desarrollad...@googlegroups.com

Hola juande.

Me da mucha verguenza molestarte pero pues espero me regales una ayuda. Mi nombre es Harol, soy un desarrollador aprendiz y muy motivado, apenas llevo 5 meses y tengo esta duda respecto a cómo manejar datos en formato JSON a través de un BasedAdapter ya que no sólo necesito que se vean los datos sino también que tengan una funcionalidad... La siguiente es la actividad en la que he estado trabajando:




public class Detalles_Deportes extends ListActivity {

TextView primerapellido;
TextView segundoapellido;
TextView nombre;
TextView programa;
TextView actividad;
TextView codcurso;

private ProgressDialog pDialog;
private static final String URL = "http://www.intelentrega.com/biensoft/deporte_detalles.php";
private static final String TAG_CODCURSO = "codcurso";
private static final String TAG_NOMBREGRUPO = "nombregrupo";
private static final String TAG_NOMBREAULA = "nombreaula";
private static final String TAG_NOMBREEDIFICIO = "nombreedificio";
private static final String TAG_HORARIO = "horario";
private static final String TAG_INFORMACION = "informacion";
private static final String TAG_FECHAMAXINSCRIP = "fechamaxinscrip";
private static final String TAG_DISPONIBLES = "disponibles";
private JSONArray mComments = null;
private ArrayList<HashMap<String, String>> mCommentList;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.detalles__deportes);

primerapellido = (TextView) findViewById(R.id.primerapellido);
segundoapellido = (TextView) findViewById(R.id.segundoapellido);
nombre = (TextView) findViewById(R.id.nombres);
programa = (TextView) findViewById(R.id.programa);
actividad = (TextView) findViewById(R.id.actividad);

SharedPreferences sp = PreferenceManager
.getDefaultSharedPreferences(Detalles_Deportes.this);
String xprimerapellido = sp.getString("primerapellido", "");
String xsegundoapellido = sp.getString("segundoapellido", "");
String xnombre = sp.getString("nombre", "");
String xprograma = sp.getString("programa", "");
String xactividad = sp.getString("actividad", "");

primerapellido.setText(xprimerapellido, TextView.BufferType.NORMAL);
segundoapellido.setText(xsegundoapellido, TextView.BufferType.NORMAL);
nombre.setText(xnombre, TextView.BufferType.NORMAL);
programa.setText(xprograma, TextView.BufferType.NORMAL);
actividad.setText(xactividad, TextView.BufferType.NORMAL);

JSONParser jsonParser = new JSONParser();
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("actividad", xactividad));
jsonParser.makeHttpRequest(URL, "POST", params);

}

@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();

// loading the comments via AsyncTask
new LoadComments().execute();
}

public void updateJSONdata() {

mCommentList = new ArrayList<HashMap<String, String>>();
JSONParser jParser = new JSONParser();
JSONObject json = jParser.getJSONFromUrl(URL);

try {

mComments = json.getJSONArray(TAG_INFORMACION);

for (int i = 0; i < mComments.length(); i++) {

JSONObject c = mComments.getJSONObject(i);
String codcurso = c.getString(TAG_CODCURSO);
String nombregrupo = c.getString(TAG_NOMBREGRUPO);
String nombreaula = c.getString(TAG_NOMBREAULA);
String nombreedificio = c.getString(TAG_NOMBREEDIFICIO);
String horario = c.getString(TAG_HORARIO);
String disponibles = c.getString(TAG_DISPONIBLES);
String fechamaxinscrip = c.getString(TAG_FECHAMAXINSCRIP);

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

map.put(TAG_CODCURSO, codcurso);
map.put(TAG_NOMBREGRUPO, nombregrupo);
map.put(TAG_NOMBREAULA, nombreaula);
map.put(TAG_NOMBREEDIFICIO, nombreedificio);
map.put(TAG_HORARIO, horario);
map.put(TAG_DISPONIBLES, disponibles);
map.put(TAG_FECHAMAXINSCRIP, fechamaxinscrip);
mCommentList.add(map);

}
      

  
} catch (JSONException e) {
e.printStackTrace();
}
}

 private void updateList() {
 
 ListAdapter adapter = new SimpleAdapter(this, mCommentList,
 R.layout.detalles_deportes_child, new String[] { TAG_CODCURSO,
 TAG_NOMBREGRUPO, TAG_NOMBREAULA, TAG_NOMBREEDIFICIO, TAG_HORARIO,
 TAG_DISPONIBLES, TAG_FECHAMAXINSCRIP }, new int[] { R.id.codcurso,
 R.id.nombregrupo, R.id.nombreaula, R.id.nombreedificio, R.id.horario,
 R.id.cupos, R.id.fechamaxinscrip });
 
 setListAdapter(adapter);
 
 
 ////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
// ////ACA ES LA PARTE EN LA QUE TENGO
// DIFICULTADES//////////////////////////////////////////////////////////////////
// //////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
 
 
 
 }
 

public class LoadComments extends AsyncTask<Void, Void, Boolean> {

@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(Detalles_Deportes.this);
pDialog.setMessage("Loading Comments...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}

@Override
protected Boolean doInBackground(Void... arg0) {
updateJSONdata();
return null;

}

@Override
protected void onPostExecute(Boolean result) {
super.onPostExecute(result);
pDialog.dismiss();
updateList();
}
}

}

Jefferson Delgado P.

unread,
Mar 3, 2014, 2:26:19 AM3/3/14
to desarrollad...@googlegroups.com
Buenas,

Así a bote pronto, no veo nada extraño, salvo la línea "setListAdapter(adapter);"
¿A qué le estás asignando ese adaptador?
¿El logcat te da algún error?

Un saludo


--
Para participar es necesario que leas detenidamente las normas del grupo: http://goo.gl/8h8ez2

---
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a desarrolladores-a...@googlegroups.com.
Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/desarrolladores-android.

Gabriel Pozo

unread,
Mar 3, 2014, 10:39:41 AM3/3/14
to desarrollad...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages