Вы находитесь на странице: 1из 50

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

UNIVERSIDAD SAN PEDRO


INGENIERA INFORMTICA Y DE SISTEMAS
VII CICLO

USO DE JSON EN ANDROID


Desarrollo de Aplicaciones Mviles
DOCENTE: Ing. Segundo Edwin Cieza Mostacero
ALUMNOS:
Gutierrez Mendoza Kenedy Johnson
Meja Vasquez Golbher
Sulln Pizarro Henry

2014
CHIMBOTE PER

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

NDICE
NDICE .......................................................................................................................................... 1
JSON en Android .......................................................................................................................... 2
1.

Qu es JSON? ..................................................................................................................... 2

2.

Valores JSON ........................................................................................................................ 2

3.

Mtodos JSON...................................................................................................................... 2

4.

Clases que proporciona Java................................................................................................ 3

5.

Demostracin 1 (Uso de JSON en Java): .............................................................................. 3


Paso 1. Crear una aplicacin Android ............................................................................... 3
Paso 2. Disear la aplicacin Android ............................................................................... 7
Paso 3. Programar la aplicacin: ....................................................................................... 7
Paso 4. Crear un AVD y ejecutar la aplicacin: ............................................................... 10

6.

Demostracin 2 (Uso de JSON en Java con base de datos): .............................................. 14


Paso 1. Disear la base de datos:.................................................................................... 14
Paso 2. Crear un servicio web: ........................................................................................ 15
Paso 3. Publicar el servicio web: ..................................................................................... 23
Paso 4. Configurar permisos en la base de datos: .......................................................... 30
Paso 5. Probar el servicio ya publicado utilizando nuestra direccin IP:........................ 34
Paso 6. Crear la aplicacin Android que consuma los resultados en JSON: ................... 36
Paso 7. Ejecutar la aplicacin .......................................................................................... 48

Bibliografa ................................................................................................................................. 49

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

JSON en Android
1. Qu es JSON?
Es el acrnimo en ingls de JavaScript Object Notation, es un formato ligero para el
intercambio de datos en aplicaciones web. JSON tiene la ventaja de que no requiere el
uso de XML. (Sacristn, 2012)
JSON (JavaScript Object Notation) es un formato de intercambio de datos ligero. Es fcil
para los seres humanos a leer y escribir. Es fcil para las mquinas para analizar y
generar. Se basa en un subconjunto del lenguaje de programacin JavaScript, estndar
ECMA-262 3rd Edition -. 12 1999 JSON es un formato de texto que es completamente
independiente del lenguaje pero utiliza convenciones que son familiares para los
programadores de la C-familia de lenguajes, incluyendo C, C + +, C #, Java, JavaScript,
Perl, Python, y muchos otros. Estas propiedades hacen de JSON un lenguaje ideal-el
intercambio de datos.

2. Valores JSON
Los tipos de valores en JSON son los siguientes:
Un string (entre comillas simples)
Un nmero (entero o float)
Un booleano (true o false)
Un objeto (entre llaves {} )
Un array (entre corchetes [] )
Null

3. Mtodos JSON
get (String name): Devuelve el valor en la forma de tipo Object.
getInt (String name): Devuelve el valor entero especificado por la clave.
getLong (String name): Devuelve valor entero largo especificado por la clave.
getDouble (String name): Devuelve el valor doble especificado por la clave.
getString (String name): Devuelve el valor en la forma de tipo String.
getBoolean (String name): Devuelve el valor booleano especificado por la clave.
length(): Devuelve el nmero de asignaciones de nombre / valor en este objeto.

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

4. Clases que proporciona Java


JSONArray
JSONObject
JSONStringer
JSONTokenizer

5. Demostracin 1 (Uso de JSON en Java):


Esta demostracin se basa en cmo utilizar las clases JSONObject y JSONArray para
agregar y quitar elementos a una cadena con formato JSON.

Paso 1. Crear una aplicacin Android


1.1) Creacin de una aplicacin Android:
File
New
Android Application Project

Figura 1: Crear aplicacin Android (men File)

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

Ingresar el nombre para la aplicacin:

Figura 2: Crear aplicacin: Ingresar el nombre

Clic en siguiente:

Figura 3: Clic en siguiente

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

Establecer el icono (lo dejaremos por defecto):

Figura 4: Establecer icono

Crear una actividad en blanco:

Figura 5: Crear actividad en blanco

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

Ingresar el nombre para la actividad:

Figura 6: Ingresar nombre para la actividad y clic en Finish

1.2)

Ya tenemos nuestra aplicacin creada con una actividad en blanco:

Figura 7: Aplicacin Android creada y lista para programar

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

Paso 2. Disear la aplicacin Android


2.1)

Disear en el archivo activity_main.xml lo siguiente:

TextView
ID: tvTitulo
ID: tvCodigo
ID: tvLibro
ID: tvAutor

EditText
ID: etCodigo
ID: etNombre
ID: etAutor

ID: tvAlerta
ID: tvMostrar
ID: tvResultado
Aqu va un TextView, pero sin texto

Button
ID: btnAgregar
ID: btnNuevo
ID: btnQuitar

Figura 8: Diseo de la actividad

Paso 3. Programar la aplicacin:


3.1)

Programar en el MainActivity.java lo siguiente:

package com.usp.jsoncadena;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import
import
import
import
import
import
import

android.os.Bundle;
android.app.Activity;
android.view.Menu;
android.view.View;
android.widget.Button;
android.widget.EditText;
android.widget.TextView;

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

public class MainActivity extends Activity {


EditText etNombre;
EditText etAutor;
EditText etCodigo;
Button btnAgregar;
TextView tvResultado;
Button btnNuevo;
Button btnQuitar;
JSONArray lista = new JSONArray();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Referencia a las vistas
etNombre = (EditText) findViewById(R.id.etNombre);
etAutor = (EditText) findViewById(R.id.etAutor);
etCodigo = (EditText) findViewById(R.id.etCodigo);
btnAgregar = (Button) findViewById(R.id.btnAgregar);
etAutor = (EditText) findViewById(R.id.etAutor);
tvResultado = (TextView) findViewById(R.id.tvResultado);
btnNuevo = (Button) findViewById(R.id.btnNuevo);
btnQuitar = (Button) findViewById(R.id.btnQuitar);
// Codigo para agregar un elemento a una cadena JSON
btnAgregar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
JSONObject obj = new JSONObject();
String codigo, nombre, autor;
nombre = etNombre.getText().toString();
autor = etAutor.getText().toString();
codigo = etCodigo.getText().toString();
try {
obj.put("Autor", autor);
obj.put("Nombre", nombre);
obj.put("Codigo", codigo);
lista.put(obj);
} catch (JSONException e) {
e.printStackTrace();
}
tvResultado.setText(lista.toString());
}
});

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

// Codigo para quitar un elemento de una cadena JSON


btnQuitar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String codigo;
codigo = etCodigo.getText().toString();
// llenar otro json excluyendo segun el codigo:
JSONArray aux = new JSONArray();
try {
for (int i = 0; i < lista.length(); i++) {
JSONObject obj2 = lista.getJSONObject(i);
if (!obj2.getString("Codigo").equals(codigo)) {
aux.put(obj2);
}
}
lista = new JSONArray();
lista = aux;
tvResultado.setText(lista.toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
});
// Codigo para limpiar las vistas
btnNuevo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
etNombre.setText("");
etAutor.setText("");
etCodigo.setText("");
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

Paso 4. Crear un AVD y ejecutar la aplicacin:


4.1) Iniciar el Android Virtual Device Manager y hacer clic en el botn New:

Figura 9: Iniciando el Android Virtual Device Manager

4.2) Realizar la siguiente configuracin (de ejemplo) para el dispositivo y hacer clic en el
botn OK

Figura 10: Creacin de un nuevo Dispositivo Virtual Android

10

UNIVERSIDAD SAN PEDRO


4.3)

JSON EN ANDROID

Seleccionar el dispositivo y hacer clic en el botn Start para iniciarlo.

Figura 11: Inicializacin de un dispositivo virtual

4.4)

Hacer clic en el botn Launch, para visualizar el dispositivo.

Figura 12: Visualizar el dispositivo virtual

11

UNIVERSIDAD SAN PEDRO


4.5)

JSON EN ANDROID

Finalmente se puede visualizar nuestro dispositivo virtual en pantalla:

Arrastrar hacia
arriba para activar

Figura 13: Interfaz de un Dispositivo Virtual Android

12

UNIVERSIDAD SAN PEDRO

4.6)

JSON EN ANDROID

Ejecutar la aplicacin:

Figura 14: Ejecutar aplicacin

Figura 15: Aplicacin en funcionamiento

13

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

6. Demostracin 2 (Uso de JSON en Java con base de datos):


Paso 1. Disear la base de datos:
6.1)

Disear la siguiente base de datos con nombre LibrosBD:

Figura 16: Diseo de la base de datos LibrosBD

6.2) Procedimientos almacenados


Procedimiento: Consultar libros por editorial
CREATE PROCEDURE Pa_ListaLibros (@EditorialID int)
AS
BEGIN
SELECT

lib.LibroID,
lib.Titulo,
aut.Nombre AS [Autor],
lib.Anio,
lib.Precio

FROM

Libros lib
INNER JOIN Autor aut
ON lib.AutorID = aut.AutorID
INNER JOIN Editorial ed
ON lib.EditorialID = ed.EditorialID

WHERE

ed.EditorialID = @EditorialID

END
GO

14

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

Procedimiento almacenado: Listar Editoriales


CREATE PROCEDURE Pa_ListaEditoriales
AS
BEGIN
SELECT

ed.EditorialID,
ed.Nombre

FROM

Editorial ed

END

Paso 2. Crear un servicio web:


2.1)

Crear nuevo proyecto en Visual Studio:


Abrir Visual Studio 2010 y hacer clic en Archivo

Nuevo Proyecto.

Figura 17: Diseo de base de datos

15

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

Seleccionar: Aplicacin web vaca de ASP .NET.


Ingresar un nombre para el servicio web y clic en Aceptar

Figura 18: Crear una aplicacin ASP .NET vaca

2.2)

Aadir un nuevo servicio web:

Figura 19: Crear un nuevo webservice

16

UNIVERSIDAD SAN PEDRO

2.3)

Cdigo del servicio web en C#:

using
using
using
using

System.Data;
System.Data.SqlClient;
System.Text;
System.Web.Services;

JSON EN ANDROID

namespace ProyectoJSON
{
/// <summary>
/// Descripcin breve de WServiceJSON
/// </summary>
[WebService(Namespace = "http://usp.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// Para permitir que se llame a este servicio Web desde un script,
// usando ASP.NET AJAX, quite la marca de comentario de la lnea siguiente.
// [System.Web.Script.Services.ScriptService]
public class WServiceJSON : WebService
{
// Cdigo para el acceso a datos desde SQL Server:
private const string ConexionString = "Data Source=.;Initial Catalog=LibrosDB;"
+ "Integrated Security=True";
private SqlCommand CreateCommand(string procedureName)
{
var cmd = new SqlCommand(procedureName)
{
Connection = new SqlConnection(ConexionString),
CommandType = CommandType.StoredProcedure
};
return cmd;
}
// Mtodo para listar editoriales:
[WebMethod]
public string ListaEditoriales()
{
StringBuilder json = new StringBuilder();
SqlCommand cmd = CreateCommand("Pa_ListaEditoriales");
cmd.Connection.Open();
SqlDataReader dr = cmd.ExecuteReader();
json.Append("{\"Editoriales\":[");
int count = 0;
while (dr.Read())
{
json.AppendFormat("{{\"EditorialID\":\"{0}\",\"Nombre\":\"{1}\"}},",
dr["EditorialID"], dr["Nombre"]);
count++;
}
cmd.Connection.Close();
if (count > 0)
json[json.Length - 1] = ']';

17

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

else
json.Append(']');
json.Append('}');
return json.ToString();
}
// Mtodo para listar libros a partir de un codigo de editorial
[WebMethod]
public string ListaLibros(int editorialID)
{
StringBuilder json = new StringBuilder();
SqlCommand cmd = CreateCommand("Pa_ListaLibros");
cmd.Parameters.AddWithValue("editorialID", editorialID);
cmd.Connection.Open();
SqlDataReader dr = cmd.ExecuteReader();
json.Append("{\"Libros\":[");
int count = 0;
while (dr.Read())
{
json.AppendFormat("{{\"Titulo\":\"{0}\"," +
"\"Autor\":\"{1}\"," +
"\"Precio\":\"{2}\"}},",
dr["Titulo"], dr["Autor"], dr["Precio"]);
count++;
}
cmd.Connection.Close();
if (count > 0)
json[json.Length - 1] = ']';
else
json.Append(']');
json.Append('}');
return json.ToString();
}
} // Cierra clase
} // Cierra namespace

18

UNIVERSIDAD SAN PEDRO

2.4)

JSON EN ANDROID

Pruebas antes de publicar (Mtodo ListaEditoriales):


Presionar la tecla F5 para ejecutar el proyecto.
En el navegador se muestran los mtodos implementados en la clase WServiceJSON

Figura 20: Ejecutar el servicio web

Al realizar clic en la opcin ListaEditoriales, aparece la pantalla para invocar su


funcionalidad.

Figura 21: Pantalla de ejecucin del mtodo ListaEditoriales

19

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

Este es el resultado al ejecutar el mtodo ListaEditoriales, est en formato JSON

Copiar y pegar, para probar

Figura 22: Pantalla Resultados de la ejecucin del mtodo ListaEditoriales

Se puede validar el resultado en www.json.parser.online.fr

Figura 23: Parsing del resultado en JSON

20

UNIVERSIDAD SAN PEDRO

2.5)

JSON EN ANDROID

Pruebas antes de publicar (Mtodo ListaLibros):


Presionar la tecla F5 para ejecutar el proyecto.
En el navegador se muestran los mtodos implementados en la clase WServiceJSON

Figura 24: Ejecutar el servicio web

Se puede apreciar el resultado de la ejecucin del mtodo en JSON.

Figura 25: Pantalla Resultados de la ejecucin del mtodo ListaLibros

21

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

Se puede validar el resultado en www.json.parser.online.fr

Figura 26: Parsing del resultado en JSON

22

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

Paso 3. Publicar el servicio web:


3.1)

Crear el directorio WServiceJSON en C:\Inetpub\wwwroot

Figura 27: Crear directorio WService en wwwroot

3.2)

Abrir el Administrador de IIS y crear un grupo de aplicaciones:

Figura 28: Administrador de IIS

23

UNIVERSIDAD SAN PEDRO


3.3)

JSON EN ANDROID

Crear el grupo de aplicaciones JsonAppPool:

Figura 29: Crear grupo de aplicaciones en el Administrador de IIS

Figura 30: Grupo de aplicaciones creado en el Administrador de IIS

24

UNIVERSIDAD SAN PEDRO


3.4)

JSON EN ANDROID

Convertir en aplicacin nuestra carpeta creada en wwwroot :

Figura 31: Convertir nuestro directorio WServiceJSON en aplicacin

Figura 32: Seleccionar un grupo de aplicaciones para nuestra aplicacin

25

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

Figura 33: Seleccionar el grupo de aplicaciones JsonAppPool para la aplicacin

Figura 34: Aplicacin web en IIS lista para publicar nuestro Web Service en l

26

UNIVERSIDAD SAN PEDRO


3.5)

JSON EN ANDROID

Publicar la aplicacin desde el Visual Studio:

Figura 35: Publicar el proyecto

Figura 36: Configurar la publicacin del proyecto

27

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

Figura 37: Seleccionar la opcin WServiceJSON para publicar nuestro proyecto

Figura 38: Realizar la publicacin de nuestro Servicio Web

28

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

Figura 39: Publicacin realizada

29

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

Paso 4. Configurar permisos en la base de datos:


4.1)

Crear el usuario IIS APPPOOL\JsonAppPool (el mismo que creamos en el IIS):

Ejecutar el siguiente cdigo en SQL Server


EXEC sys.sp_grantlogin

'IIS APPPOOL\JsonAppPool'

USE LibrosDB
EXEC sys.sp_grantdbaccess 'IIS APPPOOL\JsonAppPool'

Figura 40: Crear el usuario 'IIS APPPOOL\JsonAppPool en SQL Server 2012

30

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

4.2) Asignar permisos de ejecucin de los procedimientos almacenados a nuestro


usuario IIS APPPOOL\JsonAppPool :

Figura 41: Asignar permisos al usuario creado

Figura 42: Asignar permisos de nuestro usuario a los procedimientos almacenados en SQL

31

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

Figura 43: Asignar permisos de nuestro usuario a los procedimientos almacenados en SQL

Figura 44: Asignar permisos de nuestro usuario a los procedimientos almacenados en SQL

32

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

Figura 45: Asignar permisos de nuestro usuario a los procedimientos almacenados en SQL

Figura 46: Asignar permisos de nuestro usuario a los procedimientos almacenados en SQL

Y hacemos lo mismo para el procedimiento almacenado Pa_ListaLibros

33

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

Paso 5. Probar el servicio ya publicado utilizando nuestra direccin IP:


5.1)

Ejecutar el servicio web mediante direccin IP

Figura 47: Ejecutar el servicio web desde el navegador mediante direccin IP

Figura 48: Ejecucin del mtodo ListaEditoriales

34

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

Figura 49: Resultado de la ejecucin del mtodo ListaEditoriales

35

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

Paso 6. Crear la aplicacin Android que consuma los resultados en JSON:


6.1)

Crear nueva aplicacin Android:


File, New, Android Application Project

Figura 50: Crear aplicacin Android (men File)

6.2)

Crear nueva aplicacin Android:

Figura 51: Crear aplicacin: Ingresar el nombre

36

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

Figura 52: Clic en siguiente

Figura 53: Establecer icono

37

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

Figura 54: Crear actividad en blanco

Figura 55: Ingresar nombre para la actividad y clic en Finish

38

UNIVERSIDAD SAN PEDRO


6.3)

JSON EN ANDROID

Aplicacin creada con una actividad en blanco incluida:

Figura 56: Aplicacin Android creada y lista para programar

6.4)

Disear la aplicacin:

Figura 57: Diseo de la actividad

39

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

Cdigo de la actividad activity_main.xml:


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
tools:ignore="UselessParent" >
<TextView
android:id="@+id/tv_titulo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_marginTop="15dp"
android:text="@string/tv_titulo"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@+id/tv_seleccione"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_marginTop="5dp"
android:text="@string/tv_seleccione" />
<Spinner
android:id="@+id/spin_editorial"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TableLayout
android:id="@+id/tb_libros_header"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="12dp"
android:layout_marginRight="12dp" >
<TableRow
android:id="@+id/row_header"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:ignore="UselessParent" >
<TextView
android:id="@+id/tv_col_titulo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="1dp"
android:layout_marginRight="1dp"
android:layout_weight="0.6"
android:background="#DBE7F2"

40

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

android:paddingBottom="1dp"
android:paddingLeft="2dp"
android:paddingTop="1dp"
android:text="@string/tv_col_titulo"
android:textColor="#356A9F"
android:textSize="12sp" />
<TextView
android:id="@+id/tv_col_autor"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="1dp"
android:layout_marginRight="1dp"
android:layout_weight="0.4"
android:background="#DBE7F2"
android:paddingBottom="1dp"
android:paddingLeft="2dp"
android:paddingTop="1dp"
android:text="@string/tv_col_autor"
android:textColor="#356A9F"
android:textSize="12sp" />
<TextView
android:id="@+id/tv_col_precio"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="1dp"
android:layout_marginRight="1dp"
android:layout_weight="0.6"
android:background="#DBE7F2"
android:paddingBottom="1dp"
android:paddingLeft="2dp"
android:paddingTop="1dp"
android:text="@string/tv_col_precio"
android:textColor="#356A9F"
android:textSize="12sp" />
</TableRow>
</TableLayout>
</LinearLayout>
<ScrollView
android:id="@+id/scrollview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp" >
<TableLayout
android:id="@+id/tb_libros_detail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="12dp"
android:layout_marginRight="12dp" >
</TableLayout>
</ScrollView>
</LinearLayout>

41

UNIVERSIDAD SAN PEDRO


6.5)

JSON EN ANDROID

Programar la aplicacin:
Para trabajar en comunicacin con el servicio web creado debemos aadir a la
aplicacin la librera ksoap2, se puede descargar desde: Descargar KSOAP2

Figura 58: Adjuntar la librera Ksoap2 a nuestra aplicacin Android

Cdigo de la clase ActivityMain.java:

package com.usp.demojson;
import java.io.IOException;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpResponseException;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;

42

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TableLayout;
import android.widget.TableLayout.LayoutParams;
import android.widget.TableRow;
import android.widget.TextView;
import android.widget.Toast;

// Clase MainActivity
public class MainActivity extends Activity {

// Variables para los controles


Context _context;
private Spinner spin_editorial;
private TableLayout tb_libros;
private int [] editorialID_list;
private String [] editorial_list;
private int editorial_count;

// Evento onCreate para inicializar la Actividad


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
_context = getApplicationContext();
cargarSpinnerOrdenes();
tb_libros = (TableLayout) findViewById(R.id.tb_libros_detail);
spin_editorial = (Spinner) findViewById(R.id.spin_editorial);
spin_editorial.setOnItemSelectedListener(
spinEditorial_OnItemSelectedListener);
}

// Ejecuta el metodo cargarTablaLibros cada vez que cambia el elemento


// seleccionado del spinner spinEditorial
OnItemSelectedListener spinEditorial_OnItemSelectedListener =
new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent,
View view, int pos, long id) {

43

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

if (editorial_count > 0) {
cargarTablaLibros(editorialID_list[pos]);
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
};

// Muestra los datos de los libros segn editorial en un TableLayout


public void cargarTablaLibros(final int editorialID) {
Thread nt = new Thread() {
String result = "";
@Override
public void run() {
// Parameters:
final String NAMESPACE = "http://usp.org/";
final String URL = "http://192.168.1.55/WServiceJSON/WServiceJSON.asmx";
final String METHOD_NAME = "ListaLibros";
final String SOAP_ACTION = "http://usp.org/ListaLibros";
// Envelope:
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapSerializationEnvelope.VER11);
envelope.dotNet = true;
// Soap object:
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("editorialID", editorialID);
envelope.setOutputSoapObject(request);
// Transport:
HttpTransportSE transporte = new HttpTransportSE(URL);
try {
transporte.call(SOAP_ACTION, envelope);
Object resultado_xml = envelope.getResponse();
result = resultado_xml.toString();
} catch (HttpResponseException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
} catch (XmlPullParserException ex) {
ex.printStackTrace();
}
// Perform operation:
runOnUiThread(new Runnable() {
@Override
public void run() {

44

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

// JSON Parsing
JSONObject json_data;
JSONArray precios;
int precios_count;
try {
json_data = new JSONObject(result);
precios = (JSONArray) json_data.get("Libros");
precios_count = precios.length();
if (precios_count > 0) {
try {
int match = LayoutParams.MATCH_PARENT;
int wrap = LayoutParams.WRAP_CONTENT;
// LayoutParams (width, height, weigth);
LayoutParams row_layout = new LayoutParams(match, wrap, 1);
TableRow.LayoutParams layout_det1 = new TableRow.LayoutParams(
wrap, match, 0.4f);
TableRow.LayoutParams layout_det2 = new TableRow.LayoutParams(
wrap, match, 0.3f);
layout_det1.setMargins(0, 0, 1, 1);
layout_det2.setMargins(0, 0, 1, 1);
tb_libros.removeAllViews();
for (int k = 0; k < precios_count; k++) {
JSONObject content = precios.getJSONObject(k);
// Parametros:
TextView txt_det1 = new TextView(MainActivity.this);
TextView txt_det2 = new TextView(MainActivity.this);
TextView txt_det3 = new TextView(MainActivity.this);
txt_det1.setBackgroundColor(Color.WHITE);
txt_det1.setPadding(2, 2, 1, 1);
txt_det1.setText(content.getString("Titulo"));
txt_det1.setTextSize(11f);
txt_det2.setBackgroundColor(Color.WHITE);
txt_det2.setPadding(2, 2, 1, 1);
txt_det2.setText(content.getString("Autor"));
txt_det2.setTextSize(11f);
txt_det3.setBackgroundColor(Color.WHITE);
txt_det3.setPadding(2, 2, 1, 1);
txt_det3.setText(content.getString("Precio"));
txt_det3.setTextSize(11f);
TableRow row_detail = new TableRow(MainActivity.this);
row_detail.addView(txt_det1, layout_det1);
row_detail.addView(txt_det2, layout_det2);
row_detail.addView(txt_det3, layout_det2);
tb_libros.addView(row_detail, row_layout);
}

45

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

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

// Muestra los datos de las editoriales en el spinner spinEditorial


public void cargarSpinnerOrdenes() {
Thread nt = new Thread() {
String result = "";
@Override
public void run() {
// Parameters:
final String NAMESPACE = "http://usp.org/";
final String URL = "http://192.168.1.55/WServiceJSON/WServiceJSON.asmx";
final String METHOD_NAME = "ListaEditoriales";
final String SOAP_ACTION = "http://usp.org/ListaEditoriales";
// Envelope:
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapSerializationEnvelope.VER11);
envelope.dotNet = true;
// Soap object:
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
envelope.setOutputSoapObject(request);
// Transport:
HttpTransportSE transporte = new HttpTransportSE(URL);
try {
transporte.call(SOAP_ACTION, envelope);
Object resultado_xml = envelope.getResponse();
result = resultado_xml.toString();
JSONObject json_data = new JSONObject(result);
JSONArray ordenes = (JSONArray) json_data.get("Editoriales");

46

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

editorial_count = ordenes.length();
if (editorial_count > 0) {
editorialID_list = new int[editorial_count];
editorial_list = new String[editorial_count];
for (int i = 0; i < ordenes.length(); i++) {
JSONObject detail = ordenes.getJSONObject(i);
editorialID_list[i] = detail.getInt("EditorialID");
editorial_list[i] = detail.getString("Nombre");
}
}
} catch (HttpResponseException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
} catch (XmlPullParserException ex) {
ex.printStackTrace();
} catch (JSONException ex) {
ex.printStackTrace();
}
// Perform operation:
runOnUiThread(new Runnable() {
@Override
public void run() {
if (editorial_count > 0) {
ArrayAdapter<String> adaptador = new ArrayAdapter<String>(
MainActivity.this, android.R.layout.simple_list_item_1,
editorial_list);
spin_editorial.setAdapter(adaptador);
} else {
Toast.makeText(_context, "No hay editoriales que mostrar.",
Toast.LENGTH_LONG).show();
}
}
});
}
};
nt.start();
}

47

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}

Paso 7. Ejecutar la aplicacin


7.1) Realizar los pasos para crear y ejecutar un dispositivo virtual en las pginas 10 a 12 de
este tutorial.
7.2) Resultados ejecucin de la aplicacin:

Figura 59: Ejecucin de nuestra aplicacin que utiliza JSON para recuperar datos desde SQL Server 2012

48

UNIVERSIDAD SAN PEDRO

JSON EN ANDROID

Bibliografa
Aydin, M. (2012). Android 4: New Features for Application Development. Birmingham, UK:
Packt Publishing.
Sacristn, C. R. (2012). Programacin en Android.

Link de descarga:
http://1drv.ms/1ofC9p8

49