
Hoy veremos como llenar un spinner con la librería volley, este tutorial es básico pero muy revelador a la hora de trabajar con controladores spinner, les comento que es mucho mas fácil que cuando lo hacíamos con la librería de apache, si no leíste puede verlo en este siguiente enlace: poblar un spinner , las recomendaciones acostumbradas en nuestros tutoriales es que lean desde el principio al fin y tendrán ceros errores.
Como llenar un spinner con volley y mysql en android
Contenidos

Que necesitamos para llenar nuestro spinner?
- paciencia
- un base de datos en mysql
- una web services en php y json
- una aplicación android
Bien empezamos por la base de datos se llamara, spinner y contendrá lo siguiente.
Base de datos
CREATE TABLE IF NOT EXISTS `frutas` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `nombre` varchar(90) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `id` (`id`) ); INSERT INTO `frutas` (`id`, `nombre`) VALUES (1, 'manzana'), (2, 'uva'), (3, 'papaya'), (4, 'mango');
Bueno ahora seguimos con nuestra webservice, tendrá la siguiente estructura. dentro de una carpeta llamada spinner tendremos tres carpetas datos, negocio, web-services y dentro de ella los archivos como se muestra la imagen:

crearemos primero la Conexion.clase.php
Conexion.clase.php
<?php class Conexion { protected $dblink; function __construct() { $servidor = "mysql:host=localhost;dbname=spinner"; $usuario = "root"; $clave = "12345"; $this->dblink = new PDO($servidor, $usuario, $clave); $this->dblink->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $this->dblink->exec("SET NAMES utf8"); } } ?>
Ahora nuestro Fruta.clase.php
Fruta.clase.php
<?php require_once '../datos/Conexion.clase.php'; class Fruta extends Conexion{ public function listar(){ $sql = "SELECT * FROM frutas"; $sentencia = $this->dblink->prepare($sql); $sentencia->execute(); return $sentencia->fetchAll(PDO::FETCH_OBJ); } } ?>
Por ultimo nuestro listar-fruta.php
listar-fruta.php
<?php require_once '../negocio/Fruta.clase.php'; $objFruta = new Fruta(); $resultado = $objFruta->listar(); $respuesta = array( "usuario"=>$resultado ); echo json_encode($respuesta); ?>
Si todo lo hicimos bien nos dirigimos al siguiente enlace:
http://localhost/spinner/web-services/listar-fruta.php
y obtendremos la lista de frutas:
{ "usuario": [ { "id": "1", "nombre": "manzana" }, { "id": "2", "nombre": "uva" }, { "id": "3", "nombre": "papaya" }, { "id": "4", "nombre": "mango" } ] }
Ahora continuamos con la aplicación, empezamos por los permisos que debemos agregar en nuestro AndroidManifest
<uses-permission android:name="android.permission.INTERNET"/>
Luego debemos agregar la librería de volley en nuestro buil.gradle
compile'com.android.volley:volley:1.0.0'
Continuamos con la parte gráfica de la aplicación para esto solo necesitamos agregar el controlador spinner.
activity_main
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <Spinner android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/sppFrutas" android:layout_marginTop="65dp" android:layout_alignParentTop="true" android:layout_alignParentStart="true" /> </RelativeLayout>
Crearemos una clase llamada conexión.
conexion
public class Conexion { public static final String URL_WEB_SERVICES ="http://192.168.8.147/spinner/web-services/"; public static final String TAG_USERNAME = "username"; }
Por ultimo nuestro MainActivity con el código para extraer los datos.
MainActivity
import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Spinner; import android.widget.Toast; import com.androfast.server.applistarspinnervolley.datos.Conexion; import com.android.volley.DefaultRetryPolicy; import com.android.volley.Request; import com.android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.RetryPolicy; import com.android.volley.VolleyError; import com.android.volley.toolbox.StringRequest; import com.android.volley.toolbox.Volley; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { private Spinner spinner ; ArrayList<String> frutas; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); frutas=new ArrayList<>(); spinner = (Spinner) findViewById(R.id.sppFrutas); listar(); spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { String fruta= spinner.getItemAtPosition(spinner.getSelectedItemPosition()).toString(); Toast.makeText(getApplicationContext(),fruta,Toast.LENGTH_LONG).show(); } @Override public void onNothingSelected(AdapterView<?> adapterView) { // DO Nothing here } }); } public void listar(){ RequestQueue requestQueue=Volley.newRequestQueue(getApplicationContext()); StringRequest stringRequest=new StringRequest(Request.Method.POST, Conexion.URL_WEB_SERVICES+"listar-fruta.php", new Response.Listener<String>() { @Override public void onResponse(String response) { try{ JSONObject jsonObject=new JSONObject(response); JSONArray jsonArray=jsonObject.getJSONArray("usuario"); for(int i=0;i<jsonArray.length();i++){ JSONObject jsonObject1=jsonArray.getJSONObject(i); String country=jsonObject1.getString("nombre"); frutas.add(country); } spinner.setAdapter(new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_dropdown_item, frutas)); }catch (JSONException e){e.printStackTrace();} } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { error.printStackTrace(); } }); int socketTimeout = 30000; RetryPolicy policy = new DefaultRetryPolicy(socketTimeout, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT); stringRequest.setRetryPolicy(policy); requestQueue.add(stringRequest); } }
Como es de costumbre te dejo la aplicación para que la puedas descargar en el siguiente enlace aquí.
Password: www.androfast.com
Hola soy Alex Céspedes fundador de ANDROFAST, programo algunas cosas por diversión, me gusta aprender cosas nuevas y estoy pendiente de todo lo que tenga que ver con tecnología. Este blog lo cree para todas las personas que tengan dificultades en la programación, para ser sincero nunca fui bueno y reprobé algunos cursos de programación, pero mis ganas de aprender pudieron más. SI YO PUEDO TU PUEDES ANIMO!
6 comments on “Como llenar un spinner con volley y mysql en android”
Carlos Franco
12 agosto, 2018 at 5:26 amexcelente aporte alex felicidades
cristian velez
25 marzo, 2020 at 2:51 pmcomo Álex Céspedes mucho gusto mi nombre es cristian velez
me gustaria saber si me podrias colaborar es que necesito obtener el id de un spinner pero que solo me muestro el campo de nombre al seleccionar para insertar los parámetros.
yo me represento con vos Alex cuando dijistes que reprobabas en las clases de programacion y aun no soy bueno pero mis ganas de aprender me han servido mucho.
Muchas gracias por el consejo.
ANDROFAST
26 marzo, 2020 at 11:00 pmQue tal Cristian, no entendi bien lo que quieres lograr, explicame un poco mejor, intentare ayudarte…solo que me he apartado un poco de las redes y todo por el tema de coronavirus que se esta viviendo en esto tiempos.
Maycol
12 abril, 2020 at 4:48 pmHola amigo muy bueno tus tutoriales te escribo para ver si me puedes ayudar ,mi pregunta es como puedo obtener el id de la fruta,osea tu nos enseñas que lista todos los datos que estan en la tabla frutas ,pero cada fruta tiene un id .osea .aver me explico mas claro .osea en mi android quiero poner debajo del spinner tres editext para posteriormente guardarlos .pero quiero que al seleccionar una fruta me arroje su id..osea si selecciono uva en el editext me arroje su id.
ANDROFAST
16 abril, 2020 at 2:53 amfinal int spin = spinnerfruta.getSelectedItemPosition();
final int idSQL = frutasList.get(spin).getId();
cualquiera de las dos sirve
Maycol
16 abril, 2020 at 12:38 pmEso en que parte lo pongo maestro.en el php o en que parte de android ,soy nuevo en esto disculpe mi falta de concimiento