Spinner de relleno de Android con JSON Tutorial
Última actualización: 18 de noviembre de 2013
En este tutorial, aprenderá cómo llenar una rueda giratoria con datos de forma remota usando un archivo JSON en su aplicación de Android. Un control giratorio muestra un menú desplegable con valores disponibles, desde el cual el usuario puede seleccionar o navegar. Crearemos un control giratorio en la vista principal y lo completaremos con datos de forma remota utilizando un archivo JSON y al hacer clic en el control giratorio se mostrará un menú desplegable seleccionable. En el menú desplegable seleccionado, se mostrarán los resultados seleccionados debajo de la rueda giratoria. Vamos a empezar…
Cree un nuevo proyecto en Eclipse File > New > Android Application Project. Complete los detalles y nombre su proyecto JSONSpinnerTutorial .
Nombre de la aplicación: JSONSpinnerTutorial
Nombre del proyecto: JSONSpinnerTutorial
Nombre del paquete: com.androidbegin.jsonspinnertutorial
Abra su MainActivity .java y pegue el siguiente código.
Actividad principal .java
paquete com.androidbegin.jsonspinnertutorial; importar java.util.ArrayList; importar org.json.JSONArray; importar org.json.JSONObject; importar android.os.AsyncTask; importar android.os.Bundle; importar android.app.Actividad; importar android.app.ProgressDialog; importar android.util.Log; importar android.view.View; importar android.widget.AdapterView; importar android.widget.ArrayAdapter; importar android.widget.Spinner; importar android.widget.TextView; clase pública MainActivity extiende Actividad { JSONObjeto jsonobjeto; JSON Array jsonarray; ProgressDialog mProgressDialog; ArrayList<String> listamundial; ArrayList<WorldPopulation> mundo; @Anular Vacío protegido onCreate (Paquete de estado de instancia guardado) { super.onCreate(estadoDeInstanciaGuardado); setContentView(R.diseño.actividad_principal); // Descargar archivo JSON AsyncTask nuevo DescargarJSON().ejecutar(); } // Descargar archivo JSON AsyncTask clase privada DownloadJSON extiende AsyncTask<Void, Void, Void> { @Anular Protegido Void doInBackground(Void... params) { // Localiza la clase WorldPopulation mundo = new ArrayList<WorldPopulation>(); // Crea una matriz para llenar la ruleta listamundial = new ArrayList<String>(); // dirección URL del archivo JSON jsonobject = funciones JSON .getJSONfromURL("https://www.androidbegin.com/tutorial/jsonparsetutorial.txt"); intentar { // Localice el nombre de la lista de nodos jsonarray = jsonobject.getJSONArray("población mundial"); for (int i = 0; i < jsonarray.length(); i++) { jsonobject = jsonarray.getJSONObject(i); WorldPopulation worldpop = new WorldPopulation(); worldpop.setRank(jsonobject.optString("rango")); worldpop.setCountry(jsonobject.optString("país")); worldpop.setPopulation(jsonobject.optString("población")); worldpop.setFlag(jsonobject.optString("bandera")); mundo.add(worldpop); // Rellenar la ruleta con nombres de países worldlist.add(jsonobject.optString("país")); } } captura (Excepción e) { Log.e("Error", e.getMessage()); e.printStackTrace(); } devolver nulo; } @Anular vacío protegido en PostExecute (argumentos vacíos) { // Localiza la ruleta en activity_main.xml Spinner mySpinner = (Spinner) findViewById(R.id.my_spinner); // Adaptador giratorio miSpinner .setAdapter(nuevo ArrayAdapter<String>(ActividadPrincipal.esto, android.R.layout.simple_spinner_dropdown_item, lista mundial)); // Spinner en el elemento, haga clic en el oyente miSpinner .setOnItemSelectedListener(nuevo AdapterView.OnItemSelectedListener() { @Anular public void onItemSelected(AdapterView<?> arg0, Ver arg1, posición int, arg3 largo) { // TODO stub de método generado automáticamente // Localiza las vistas de texto en activity_main.xml TextView txtrank = (TextView) findViewById(R.id.rank); TextView txtcountry = (TextView) findViewById(R.id.country); TextView txtpopulation = (TextView) findViewById(R.id.population); // Establecer el texto seguido de la posición txtrank.setText("Clasificación: " + mundo.get(posición).getRank()); txtpaís.setText("País: " + mundo.get(posición).getCountry()); txtpopulation.setText("Población: " + mundo.get(posición).getPopulation()); } @Anular public void onNothingSelected(AdapterView<?> arg0) { // TODO stub de método generado automáticamente } }); } } }
En esta actividad, alojamos un archivo JSON en nuestro servidor y usamos las funciones JSON para recuperar la matriz JSON y los objetos de la dirección URL. Hemos creado una AsyncTask como tarea en segundo plano para cargar los objetos JSON en una matriz de cadenas. Luego, completamos el control giratorio con los datos JSON seleccionados y, al hacer clic en el elemento desplegable del control giratorio, se mostrarán los datos seleccionados en las vistas de texto.
Enlace de archivo JSON: https://www.androidbegin.com/tutorial/jsonparsetutorial.txt
Producción:
{ // Objeto JSON "worldpopulation": // Nombre de matriz JSON [ // Matriz JSON { // Objeto JSON "rango":1,"país":"China", "población":"1,354,040,000", "bandera":"https://www.androidbegin.com/tutorial/flag/china.png" }, { // Objeto JSON "rango":2,"país":"India", "población":"1,210,193,422", "bandera":"https://www.androidbegin.com/tutorial/flag/india.png" }, { // Objeto JSON "rango":3,"país":"Estados Unidos", "población":"315.761.000", "bandera":"https://www.androidbegin.com/tutorial/flag/unitedstates.png" }, { // Objeto JSON "rango":4,"país":"Indonesia", "población":"237.641.326", "bandera":"https://www.androidbegin.com/tutorial/flag/indonesia.png" }, { // Objeto JSON "rango":5,"país":"Brasil", "población":"193.946.886", "bandera":"https://www.androidbegin.com/tutorial/flag/brazil.png" }, { // Objeto JSON "rango":6,"país":"Pakistán", "población":"182.912.000", "bandera":"https://www.androidbegin.com/tutorial/flag/pakistan.png" }, { // Objeto JSON "rango":7,"país":"Nigeria", "población":"170.901.000", "bandera":"https://www.androidbegin.com/tutorial/flag/nigeria.png" }, { // Objeto JSON "rango":8,"país":"Bangladesh", "población":"152.518.015", "bandera":"https://www.androidbegin.com/tutorial/flag/bangladesh.png" }, { // Objeto JSON "rango":9,"país":"Rusia", "población":"143.369.806", "bandera":"https://www.androidbegin.com/tutorial/flag/russia.png" }, { // Objeto JSON "rango":10,"país":"Japón", "población":"127.360.000", "bandera":"https://www.androidbegin.com/tutorial/flag/japan.png" } ] // Matriz JSON } // Objeto JSON
A continuación, cree una clase de funciones JSON. Vaya a Archivo > Nuevo > Clase y asígnele el nombre JSONfunctions .java. Seleccione su paquete llamado com.androidbegin. jsonspinnertutorial y haga clic en Finalizar .
Abra su JSONfunctions .java y pegue el siguiente código.
Funciones JSON .java
paquete com.androidbegin.jsonspinnertutorial; importar java.io.BufferedReader; importar java.io.InputStream; importar java.io.InputStreamReader; importar org.apache.http.HttpEntity; importar org.apache.http.HttpResponse; importar org.apache.http.client.HttpClient; importar org.apache.http.client.methods.HttpPost; importar org.apache.http.impl.client.DefaultHttpClient; importar org.json.JSONException; importar org.json.JSONObject; importar android.util.Log; funciones JSON de clase pública { JSONObject estático público getJSONfromURL (String url) { InputStream es = nulo; resultado de cadena = ""; JSONObject jArray = nulo; // Descargar datos JSON desde la URL intentar { HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(url); Respuesta HttpResponse = httpclient.execute(httppost); entidad HttpEntity = respuesta.getEntity(); es = entidad.getContent(); } captura (Excepción e) { Log.e("log_tag", "Error en la conexión http" + e.toString()); } // Convertir respuesta a cadena intentar { BufferedReader lector = nuevo BufferedReader(nuevo InputStreamReader( es, "iso-8859-1"), 8); StringBuilder sb = nuevo StringBuilder(); Línea de cadena = nulo; while ((línea = lector.readLine()) != nulo) { sb.append(línea + "n"); } está cerca(); resultado = sb.toString(); } captura (Excepción e) { Log.e("log_tag", "Error al convertir el resultado" + e.toString()); } intentar { jArray = nuevo JSONObject(resultado); } captura (JSONException e) { Log.e("log_tag", "Error al analizar los datos" + e.toString()); } devuelve jArray; } }
A continuación, cree un diseño gráfico XML para MainActivity. Vaya a res > diseño > Haga clic con el botón derecho en el diseño > Nuevo > Archivo XML de Android
Nombre su nuevo archivo XML activity_main.xml y pegue el siguiente código.
actividad_principal.xml
<RelativeLayout xmlns_android="http://schemas.android.com/apk/res/android" xmlns_herramientas="http://esquemas.android.com/herramientas" android_layout_width="match_parent" android_layout_height="match_parent" > <Spinner android_id="@+id/mi_spinner" android_layout_width="wrap_content" android_layout_height="wrap_content" /> <Vista de texto android_id="@+id/rango" android_layout_width="wrap_content" android_layout_height="wrap_content" android_layout_below="@+id/mi_spinner" /> <Vista de texto android_id="@+id/país" android_layout_width="wrap_content" android_layout_height="wrap_content" android_layout_below="@+id/rango" /> <Vista de texto android_id="@+id/población" android_layout_width="wrap_content" android_layout_height="wrap_content" android_layout_below="@+id/país" /> </RelativeLayout>
En su AndroidManifest.xml , debemos declarar permisos para permitir que la aplicación se conecte a Internet. Abra su AndroidManifest.xml y pegue el siguiente código.
Manifiesto de Android. xml
<?versión xml="1.0" codificación="utf-8"?> <manifiesto xmlns_android="http://schemas.android.com/apk/res/android" paquete="com.androidbegin.jsonspinnertutorial" android_versionCode="1" android_versionName="1.0" > <usos-sdk android_minSdkVersion="8" android_targetSdkVersion="17" /> <usos-permiso android_name="android.permiso.INTERNET" /> <aplicación Android: permitir copia de seguridad = "verdadero" android_icono="@dibujable/ic_launcher" android_etiqueta="@cadena/nombre_aplicación" android_tema="@estilo/AppTheme" > <actividad android_nombre=".Actividad principal" android_etiqueta="@cadena/nombre_aplicación" > <intent-filter> <acción android_name="android.intent.action.MAIN" /> <categoría android_name="android.intent.category.LAUNCHER" /> </intent-filter> </actividad> </aplicación> </manifiesto>
Producción:
Código fuente
[purchase_link id=”8023″ text=”Comprar para descargar el código fuente” style=”button” color=”green”]