Manual Tema Dam Grupo 2 2014 i

50
UNIVERSIDAD SAN PEDRO JSON EN ANDROID 0 UNIVERSIDAD SAN PEDRO INGENIERÍA INFORMÁTICA Y DE SISTEMAS VII CICLO USO DE JSON EN ANDROID Desarrollo de Aplicaciones Móviles DOCENTE: Ing. Segundo Edwin Cieza Mostacero ALUMNOS: Gutierrez Mendoza Kenedy Johnson Mejía Vasquez Golbher Sullón Pizarro Henry 2014 CHIMBOTE – PERÚ

description

Manual

Transcript of Manual Tema Dam Grupo 2 2014 i

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    0

    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

    1

    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

    2

    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

    3

    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

    4

    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

    5

    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

    6

    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

    7

    Paso 2. Disear la aplicacin Android

    2.1) Disear en el archivo activity_main.xml lo siguiente:

    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 android.os.Bundle;

    import android.app.Activity;

    import android.view.Menu;

    import android.view.View;

    import android.widget.Button;

    import android.widget.EditText;

    import android.widget.TextView;

    Aqu va un TextView, pero sin texto

    EditText

    ID: etCodigo

    ID: etNombre

    ID: etAutor

    TextView

    ID: tvTitulo

    ID: tvCodigo

    ID: tvLibro

    ID: tvAutor

    ID: tvAlerta

    ID: tvMostrar

    ID: tvResultado

    Button

    ID: btnAgregar

    ID: btnNuevo

    ID: btnQuitar

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    8

    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

    9

    // 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

    10

    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

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    11

    4.3) 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

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    12

    4.5) Finalmente se puede visualizar nuestro dispositivo virtual en pantalla:

    Figura 13: Interfaz de un Dispositivo Virtual Android

    Arrastrar hacia

    arriba para activar

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    13

    4.6) Ejecutar la aplicacin:

    Figura 14: Ejecutar aplicacin

    Figura 15: Aplicacin en funcionamiento

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    14

    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

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    15

    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

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    16

    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

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    17

    2.3) Cdigo del servicio web en C#:

    using System.Data;

    using System.Data.SqlClient;

    using System.Text;

    using System.Web.Services;

    namespace ProyectoJSON

    {

    ///

    /// Descripcin breve de WServiceJSON

    ///

    [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] = ']';

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    18

    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

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    19

    2.4) 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

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    20

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

    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

    Copiar y pegar, para probar

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    21

    2.5) 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

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    22

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

    Figura 26: Parsing del resultado en JSON

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    23

    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

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    24

    3.3) 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

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    25

    3.4) 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

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    26

    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

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    27

    3.5) Publicar la aplicacin desde el Visual Studio:

    Figura 35: Publicar el proyecto

    Figura 36: Configurar la publicacin del proyecto

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    28

    Figura 37: Seleccionar la opcin WServiceJSON para publicar nuestro proyecto

    Figura 38: Realizar la publicacin de nuestro Servicio Web

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    29

    Figura 39: Publicacin realizada

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    30

    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

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    31

    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

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    32

    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

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    33

    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

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    34

    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

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    35

    Figura 49: Resultado de la ejecucin del mtodo ListaEditoriales

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    36

    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

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    37

    Figura 52: Clic en siguiente

    Figura 53: Establecer icono

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    38

    Figura 54: Crear actividad en blanco

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

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    39

    6.3) 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

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    40

    Cdigo de la actividad activity_main.xml:

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    41

    android:paddingBottom="1dp"

    android:paddingLeft="2dp"

    android:paddingTop="1dp"

    android:text="@string/tv_col_titulo"

    android:textColor="#356A9F"

    android:textSize="12sp" />

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    42

    6.5) 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;

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    43

    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) {

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    44

    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() {

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    45

    // 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);

    }

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    46

    } 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");

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    47

    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 adaptador = new ArrayAdapter(

    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();

    }

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    48

    @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

  • UNIVERSIDAD SAN PEDRO JSON EN ANDROID

    49

    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