Spinner de relleno de Android con JSON Tutorial

Spinner de relleno de Android con JSON Tutorial

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:

Capturas de pantalla del tutorial JSONSpinner

Código fuente

[purchase_link id=”8023″ text=”Comprar para descargar el código fuente” style=”button” color=”green”]