En este artículo veremos como consumir un servicio JSON en Android
Un servicio JSON (JavaScript Object Notation) es un formato para el intercambios de datos entre el cliente y el servidor que se usa para identificar y gestionar los datos. JSON nació como una alternativa a XML, el fácil uso en javascript ha generado un gran numero de seguidores de esta alternativa. Una de las mayores ventajas que tiene el uso de JSON es que puede ser leído por cualquier lenguaje de programación permitiéndonos el intercambio de información entre distintas tecnologías.
Ahora si tenemos la siguiente lista de frutas:
-Manzana
-Pera
-Babana
-Sandía
El Json de nuestras frutas será:
{"JSONFrutas":[{"fruta":"Manzana"},
{"fruta":"Pera"},
{"fruta":"Babana"},
{"fruta":"Sandía"},]}
Debemos tener en cuenta que nuestro JSON debe estar en algún servidor o en nuestra computadora localmente, para este ejemplo asumiremos que nuestro JSON se encuentra en la siguiente dirección:
http://serviciojson/frutas
Consumo en Android
Para el consumo de nuestro json en Android necesitaremos de dos complemento que se encuentran en la siguiente dirección: https://1drv.ms/f/s!AgM8FiaC93RaiMoN8uqOpllzjWCMig en donde se encuentran los siguientes archivos:
Dentro de la carpeta "com" encontraremos los complementos necesarios para hacer las peticiones a la url, y el "gson-2.3.1" es un jar el cual lo incluiremos en nuestro proyecto.
Una vez que creamos nuestro proyecto nos vamos a Android copiamos la carpeta "com" y lo en la carpeta java.
De la misma manera para agregar el "gson-2.3.1" nos vamos a project/app/libs dentro de la carpeta libs pegamos el "gson-2.3.1"
Lo que acabmos de agregar a nuestro proyecto nos permite hacer peticiones desde una url, lo siguiente que debemos hacer es conceder los permisos para que Android pueda hacer peticiones a internet para lo cual nos dirigimos al AndroidManifest.xml de nuestro proyecto que se encuentra dentro de Project Files src/main
Aquí debemos agragar los siguientes permisos:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.SEND_SMS"/>
Quedando de la siguiente manera:
A continuación vamos al main para realizar el consumo de nuestro servicio json y mostrarlo en un ListView cabe recalcar que al iniciar nuestra aplicación en nuestra pantalla se mostrará una lista con el resultado de la consulta para lo cual usaremos el siguiente código que nos define la interfaz que incluye un TextView (Título de la aplicación) y un ListView(Muestra el resultado de la consulta) :
<?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/mainactivity"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="hernanchos.com.mensajes.formEnvioMensajes"><TextViewandroid:text="Listado de Frutas y sus Colores"android:textSize="18dp"android:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/textView"android:textColor="@android:color/black"android:layout_alignParentTop="true"android:layout_alignParentLeft="true"android:layout_alignParentStart="true" /><ListViewandroid:layout_width="wrap_content"android:layout_height="match_parent"android:layout_marginTop="50dp"android:layout_marginBottom="50dp"android:id="@+id/listFrutas"android:textColor="@android:color/black"android:layout_centerHorizontal="true"/><Buttonandroid:text="Enviar Mensaje"android:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/btnEnviarMensajes"android:layout_alignParentBottom="true"android:layout_centerHorizontal="true" /></RelativeLayout>
Ahora para el consumo de nuestro servicio servicio y que el mismo sea visualizado en pantalla nos dirigimos a nuestro java main en donde escribiremos el siguiente código:
public class formFruta extends AppCompatActivity {ListView listFrutas;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.mainactivity);listFrutas= (ListView) findViewById(R.id.listFrutas); HttpClient cliente = new HttpClient(new OnHttpRequestComplete() {@Overridepublic void onComplete(Response status) {if (status.isSuccess()) {Gson gson = new GsonBuilder().create();try {JSONObject jsonOb = new JSONObject(status.getResult());vectJSON = jsonOb.getJSONArray("JSONFrutas");String[] vecString = new String[100];for (int i = 0; i < vectJSON.length(); i++) {JSONObject jsonFruta = vectJSON.getJSONObject(i);vecString[i] = (jsonFruta.getString("fruta"));}listFrutas.setAdapter(new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, vecString));} catch (Exception e) {Toast.makeText(formEnvioMensajes.this, "Compruebe su conexión a internet", Toast.LENGTH_SHORT).show();}}}});cliente.excecute("http://serviciosjson/frutas");El código anterior lo explicaré de mejor manera:Primero declararemos un ListView en donde se mostrará el resultado de la consultaListView listFrutas;Identificamos nuestro ListView de la vista por el idlistFrutas= (ListView) findViewById(R.id.listFrutas);Declaramos una variable de tipo HttpClient para hacer las peticiones a nuestro jsonHttpClient cliente = new HttpClient(new OnHttpRequestComplete() {Especificamos la ruta de donde se encuentra nuestro JSONcliente.excecute("http://serviciosjson/frutas");Preguntamos si la consulta tuvo éxito:if (status.isSuccess()) {Declaramos un JSONObject en el cual al momento de instaciarlo especificaremos el resultadodel status de la consulta del HttpClientJSONObject jsonOb = new JSONObject(status.getResult());Declaramos en JSONArray en donde obtendremos un Array con el reusltado de la consultapero debemos especificar el ecabezado de mi servicio JSON (en este caso "JSONFrutas")JSONArray vectJSON = jsonOb.getJSONArray("JSONFrutas");En un vector de String iremos almacenando la infromacion obtenida una vez quedeserializemos el JSON con el objetivo de mostrar en la listaString[] vecString = new String[100];A continuación recorremos nuestro JSONArray, y dentro del bucle declaramos unJSONObject en el cual vamos q especificar los datos de la consulta posición por posición delJSONArray finalmente en el vector de String iremos almacenando el resultado delJSONObject especificando el nombre del campo tal como se tiene en el JSONfor (int i = 0; i < vectJSON.length(); i++) {JSONObject jsonFruta = vectJSON.getJSONObject(i);vecString[i] = (jsonFruta.getString("fruta"));}Para finalizar en nuestra listFrutas agregamos un ArrayAdapter en el cual enviamos el vectorde String con el resultado de la búsqueda que será visto en la interfazlistFrutas.setAdapter(new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, vecString));