Vous êtes sur la page 1sur 33

SQLite es un manejador open source de bases de datos que combina una interfaz muy

limpia de SQL y que nos permite trabajar con poca memoria y con una velocidad
bastante decente, características que son necesarias cuando hablamos de entornos
móviles.

SQLite soporta las características estándar de las bases de datos relacionales como la
sintaxis que se basa en SQL, transacciones y la elaboración de consultas. Debido a
esto, cualquier desarrollador que haya trabajado con bases de datos sin importar el
entorno, no encontrará una dificultad especial en trabajar con bases de datos locales en
Android. Por otro lado, hay que dejar en claro que la API nativa de SQLite no es
compatible con JDBC contrario a lo que podría pensarse tomando en cuenta el uso de
Java como lenguaje nativo en aplicaciones Android.

Para conocer los aspectos básicos del manejo de bases de datos en Android, vamos a
dividir este tema en dos artículos. Esta primera parte abarcará nociones teóricas
introductorias del manejo de SQLite en Android. ¡Comencemos!.

Un acercamiento a SQLite

SQLite, como su nombre indica, utiliza el lenguaje SQL para las consultas (SELECT),
manipulación de datos (INSERT, DELETE, etc.), y de definición de datos (CREATE
TABLE, etc). SQLite presenta unas pequeñas variaciones donde se desvía del estándar
SQL-92, que aplica para la mayoría de bases de datos SQL.

Entre ellas, el uso de FOREIGN KEY, transacciones anidadas, RIGHT OTHER JOIN,
FULL OTHER JOIN y algunos usos de ALTER TABLE no son válidas en SQLite.

Para utilizar SQLite no se requiere de ninguna configuración o administrador de base de


datos, por lo que únicamente deberemos preocuparnos por el manejo de SQL y todo lo
demás se gestionará a través del entorno de desarrollo Android.

Debes tomar en cuenta desde el principio que el uso de bases de datos implica tareas de
I/O, que siempre tienen un impacto en el rendimiento de las aplicaciones, por lo que en
ocasiones todo esto puede tornarse lento.

SQLite soporta los tipos de datos TEXT (similar a los String en Java), INTEGER
(similar a Integer en Java) y REAL (similar a Double en Java). Si hacemos uso de
cualquier otro tipo de dato, de manera automática serán convertidos para que sean
compatibles con estos tres tipos de datos.

Si nuestra aplicación crea una base de datos, esta se guarda en el directorio


DATA/data/APP_NAME/databases/FILENAME.

“DATA” es la ruta que retorna el método Environment.getDataDirectory(),


“APP_NAME” es el nombre de nuestra aplicación, y “FILENAME” es el nombre que
le damos a la base de datos al crearla. Environment.getDataDirectory() regularmente
apunta a la SD card como ubicación predefinida.

Las bases de datos en SQLite tienen un nivel de acceso privado que abarca únicamente
la aplicación en la que fueron creadas. En caso de que necesitemos compartir la
información de una base de datos con otra aplicación haremos uso de Content
Providers.

SQLiteOpenHelper

Para crear y trabajar con bases de datos en Android, es necesario hacer uso de la clase
SQLiteOpenHelper. En esta clase es necesario sobreescribir los métodos onCreate()
para crear la base de datos, y onUpgrade() para actualizar la base de datos en caso de
que existan cambios en el esquema de la misma. Ambos métodos reciben como
parámetro un objeto SQLiteDatabase.

SQLiteOpenHelper ofrece los métodos getReadableDatabase() y


getWriteableDatabase() para trabajar con un objeto SQLiteDatabase y poder tener
acceso de lectura y escritura sobre una base de datos.

Para definir la llave primaria de una base de datos es indispensable hacer uso del
identificador _id ya que muchas de las funciones con las que trabajaremos toman en
cuenta este estándar.

SQLDatabase y Cursor

La clase SQLiteDatabase provee los métodos insert(), update() y delete() y execSQL()


que nos ayuda a ejecutar sentencias SQL directamente. El objeto ContentValues permite
definir claves y valores en las sentencias Insert y Update. La clave (key) corresponde a
la columna y el valor es el valor para la columna.

Las consultas se pueden crear a través del método rawQuery() que acepta como
parámetro una sentencia en SQL o el método query() que proporciona una interfaz para
especificar los datos dinámicos o un objeto de tipo SQLiteQueryBuilder. SQLiteBuilder
es similar a la interfaz de un proveedor de contenidos por lo que suele utilizarse con
Content Providers. Hay que saber también que toda consulta que realicemos nos
retornará un objeto de tipo Cursor.

El método de consulta contiene los parámetros de String dbName, int[] columnNames,


String whereClause, String[] valuesForWhereClause, String[] groupBy, String[]
having, String[] orderBy. En caso de que necesitemos consultar toda la información
(SELECT *) pasamos el valor null como parámetro para valuesForWhereClause. Por el
contrario, si necesitamos seleccionar algún tipo de información conforme a alguna
condición, la cláusula no deberá contener la palabra where como comúnmente haríamos
en MySQL. Por ejemplo, usaríamos: “_id=21″ como forma correcta.

Por otro lado, el objeto Cursor representa el resultado obtenido de una consulta.
 Para conocer el número de elementos que ha retornado la consulta utilizamos el
método getCount().
 Para movernos entre las filas individuales de datos utilizamos los métodos
moveToFirst() y moveToNext().
 A través del método isAfterLast() se puede comprobar si aún existen datos.

Para el entendimiento de este procedimiento en android vamos a crear una


pequeña y sencilla app que será como una pequeña agenda, la cual va a estar
conectada con una Base de Datos en SQLite y almacenará los siguientes datos:

id: INTEGER
Nombre: Text
Apellido: Text
Telefono: Text // También puede ser de tipo INTEGER
E-Mail: Text

El objetivo de esta app será conectarse a la Base de Datos creada en SQLite y


realizar las siguientes operaciones con los datos:
1.- Insertar Datos
2.- Consulta y Muestra de Datos
3.- Eliminar Uno o Todos los Datos

Para no hacer tan largo el post por el momento sólo vamos a conectar con la
base de datos e insertar los datos.

En el primer ActivityMain creamos los botones para realizar la operaciones en


otros Activities de la sigueinte manera:
Después creamos el Activity para Insertar los Datos, para crear otro activity en
Android Studio nos vamos al archivo AndroidManifest.xml, damos click
derecho y en new- acitivity. En la siguiente ventana Blank, después siguiente,
damos nombre y finalizar.

Ya esta creado el segundo activity, el cual debe tener 4 text large, 4 editText y
2 botones de la siguiente manera:
Ahora hacemos la función para pasar al segundo activity, es decir pasar del
Principal al segundo Activity, nos vamos al MainActivity.java que es el que hace
referencia al activity_main.xml:
public void pasaSegundo(View view) {
Intent i = new Intent(this, MainActivity2.class ); //MainActiv
ity2 es el nombre del .java

//Del segundo Activity


startActivity(i);
}

código completo:

package com.bd.bdapp.app;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;

public class MainActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it i


s present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}

public void pasaSegundo(View view) {


Intent i = new Intent(this, MainActivity2.class );
startActivity(i);
}
}
Para Asociarla al botón nos vamos al xml y en la vista diseño seleccionamos el
botón y del lado derecho salen las propiedades y buscamos donde dice onClick
y ponemos el nombre del método que hicimos en este caso debe ser
pasaSegundo y damos enter.

Ahora vamos a programar la clase que va a crear la BD, que va a gestionar la


versiones de la BD y nos dará acceso a ésta. Para esto en android se hace uso
de la clase SQLiteOpenHelper, por lo cual crearemos una clase que va a
heredar de SQLiteOpenHelper. Al hacer esto automáticamente nos generará el
constructor y los siguientes métodos: onCreate(SQLiteDatabase db) que sirve
para crear la tablas una vez que crea la BD y otro es
onUpgrade(SQLiteDatabase db, int i, int i2) que nos ayudará a gestionar la
versiones de la BD. Queda de la siguiente forma:

package com.bd.bdapp.app;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
* Created by root on 19/04/14.
*/
public class BD extends SQLiteOpenHelper {

//Query para crear las tablas en la bd


String query="CREATE TABLE personas (id INTEGER PRIMARY KEY AUTOIN
CREMENT, Nombre TEXT, Apellido TEXT, Telefono TEXT, Email TEXT)";

//Constructor de la clase
public BD(Context context, String name, SQLiteDatabase.CursorFacto
ry factory, int version) {
super(context, name, factory, version);
}

@Override
public void onCreate(SQLiteDatabase db) {
//Ejecuta query para crear la tabla
db.execSQL(query);
}

@Override
public void onUpgrade(SQLiteDatabase db, int i, int i2) {
db.execSQL("DROP TABLE IF EXISTS personas");

//Se crea la nueva versión de la tabla


db.execSQL(query);
}

Ahora crearemos otra clase para acceder a la base de datos y manejar los
datos de ésta, vamos a empezar con el método de para inserta, le vamos a
llamar ConexionBD:

package com.bd.bdapp.app;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import java.util.ArrayList;
import java.util.List;

/**
* Created by root on 19/04/14.
*/
public class ConexionBD {
private SQLiteDatabase db;
private Context nContext;
private BD objBD;

//Constructor de la Clase
//Recibe como parámetro una variable de Tipo contexto
// Esto debido a que Para acceder o crear la BD lo pide la Clase S
QLiteOpenHelper
public ConexionBD(Context c){
nContext=c;

public void abrirConexion(){


objBD =new BD(nContext,"BDAgenda",null,1 );
db=objBD.getWritableDatabase();
}

public void cerrarConexion(){


db.close();
}

public boolean insertar(String nombre, String apellido,String tele


fono,String email){
boolean resultado=false;

try{
String query="INSERT INTO personas(Nombre, Apellido, Telef
ono, Email) VALUES('"+nombre+"','"+apellido+"','"+
telefono+"','"+email+"')";

db.execSQL(query);
resultado=true;
return resultado;
}
catch (Exception e){
resultado=false;
return resultado;
}
}
}

Ahora vamos al .java del Segundo activity, en nuestro caso es


MainActivity2.java y hacemos los eventos de los botones:

primero el del botón limpiar

//declaramos los editText y en el Oncreate se inicializan


private EditText nombre,apellido,telefono,email;

//método para limpiar los editText


public void limpiar(View view){
nombre.setText("");
apellido.setText("");
telefono.setText("");
email.setText("");
}

Después creamos el método para insertar

public void agregar(View view){


//Declaramos variables
String nombre,apellido,telefono,email;

//Obtenemos Texto de los TextEdit


nombre=this.nombre.getText().toString();
apellido=this.apellido.getText().toString();
telefono=this.telefono.getText().toString();
email=this.email.getText().toString();

Creamos el Objeto para acceder a la BD


ConexionBD ObjCnx = new ConexionBD(this);

ObjCnx.abrirConexion(); //Abrimos Conexión

//Ejecuta el método para Insertar Datos


if(ObjCnx.insertar(nombre,apellido,telefono,email)==true){
String texto ="Elemento Agregado Corectamente";
Toast toast = Toast.makeText(this, texto, Toast.LENGTH_LON
G);
toast.show();
}
else{
String texto ="Error al Agregar Elemento";
Toast toast = Toast.makeText(this, texto, Toast.LENGTH_LON
G);
toast.show();
}

Cerramos Conexión
ObjCnx.cerrarConexion();
}

Código comlpeto del ActivityMain2.java:

package com.bd.bdapp.app;

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.util.List;

public class MainActivity2 extends ActionBarActivity {

private EditText nombre,apellido,telefono,email;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);

nombre=(EditText)findViewById(R.id.editText);
apellido=(EditText)findViewById(R.id.editText2);
telefono=(EditText)findViewById(R.id.editText3);
email=(EditText)findViewById(R.id.editText4);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it i


s present.
getMenuInflater().inflate(R.menu.main_activity2, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}

public void limpiar(View view){


nombre.setText("");
apellido.setText("");
telefono.setText("");
email.setText("");
}

public void agregar(View view){


String nombre,apellido,telefono,email;
nombre=this.nombre.getText().toString();
apellido=this.apellido.getText().toString();
telefono=this.telefono.getText().toString();
email=this.email.getText().toString();

ConexionBD ObjCnx = new ConexionBD(this);

ObjCnx.abrirConexion();
if(ObjCnx.insertar(nombre,apellido,telefono,email)==true){
String texto ="Elemento Agregado Corectamente";
Toast toast = Toast.makeText(this, texto, Toast.LENGTH_LON
G);
toast.show();
}
else{
String texto ="Error al Agregar Elemento";
Toast toast = Toast.makeText(this, texto, Toast.LENGTH_LON
G);
toast.show();
}
ObjCnx.cerrarConexion();
}
}

Ya sólo nos resta asociar los métodos con cada botón.

Capturas de la APP
MainActivity.java
package com.example.practica_android;

import android.os.Bundle;
import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {

SQLiteDatabase Sql;
EditText Codigo;
EditText Nombre;
EditText Telefono;
EditText Direccion;
EditText RUC;
EditText Parametro;
Button Registrar;
Button Actualizar;
Button Consultar;
Button Eliminar;
int opcion=0;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
BaseDatos_Android Bd=new BaseDatos_Android(getApplicationContext(), "BdClientes",
null, 1);
Sql=Bd.getWritableDatabase();
Codigo=(EditText)findViewById(R.id.editText1);
Nombre=(EditText)findViewById(R.id.editText2);
Telefono=(EditText)findViewById(R.id.editText3);
RUC=(EditText)findViewById(R.id.editText4);
Direccion=(EditText)findViewById(R.id.editText5);
Parametro=(EditText)findViewById(R.id.editText6);
Registrar=(Button)findViewById(R.id.button1);
Consultar=(Button)findViewById(R.id.button2);
Actualizar=(Button)findViewById(R.id.button3);
Eliminar=(Button)findViewById(R.id.button4);
}

public void Limpiar(){


Codigo.setText("");
Nombre.setText("");
Telefono.setText("");
RUC.setText("");
Direccion.setText("");
}
public void Nuevo_Registro(View v){
Limpiar();
opcion=1;
}

public void Actualizar_Registro(View v){


opcion=2;
}

public void Guardar_Registro(View v){


String Cod=Codigo.getText().toString();
String Nom=Nombre.getText().toString();
String Tel=Telefono.getText().toString();
String Ruc=RUC.getText().toString();
String Dir=Direccion.getText().toString();

if(opcion==1){
if (!Cod.trim().equals("") ) {
try {
Sql.execSQL("Insert into Clientes values
('"+Cod+"','"+Nom+"','"+Tel+"','"+Ruc+"','"+Dir+"')");
Toast.makeText(this, "Registro ingresado",
Toast.LENGTH_LONG).show();
} catch (Exception e) {
Toast.makeText(this, "Registro ya existe",
Toast.LENGTH_LONG).show();
}

} else {

Toast.makeText(this, "Faltan datos",


Toast.LENGTH_LONG).show();

}
}

if(opcion==2){
if (!Cod.trim().equals("") ) {
Sql.execSQL("Update Clientes set
Cli_Nombre='"+Nom+"',Cli_Telefono='"+Tel+"',Cli_Ruc='"+Ruc+"',Cli_Direccion='"+Dir+"' " +
"where Cli_Codigo='"+Cod+"'");
Toast.makeText(this, "Registro Actualizado",
Toast.LENGTH_LONG).show();
}else{
Toast.makeText(this, "Faltan datos", Toast.LENGTH_LONG).show();
}
}

public void EliminarRegistro(View v) {

String Cod = Codigo.getText().toString();


if (!Cod.trim().equals("")) {

Sql.execSQL("delete from Clientes where Cli_Codigo='" + Cod + "'");


Toast.makeText(this, "Registro eliminado", Toast.LENGTH_LONG)
.show();
} else {

Toast.makeText(this, "Faltan datos", Toast.LENGTH_LONG).show();


}
Limpiar();
}

public void BuscarRegistro(View v) {

String Par = Parametro.getText().toString();

if (!Par.trim().equals("")) {

try {

Cursor C;

C = Sql.rawQuery(
"Select Cli_Codigo,
Cli_Nombre,Cli_Telefono,Cli_Ruc,Cli_Direccion from Clientes where Cli_Codigo='" + Par + "'",
null);
C.moveToFirst();
Codigo.setText(C.getString(0));
Nombre.setText(C.getString(1));
Telefono.setText(C.getString(2));
RUC.setText(C.getString(3));
Direccion.setText(C.getString(4));
Toast.makeText(this, "Registro encontrado",
Toast.LENGTH_LONG)
.show();
} catch (Exception e) {

Toast.makeText(this, "Registro no encontrado",


Toast.LENGTH_LONG).show();

Limpiar();
}

} else {

Toast.makeText(this, "Faltan datos", Toast.LENGTH_LONG).show();

}
}
BaseDatos_Android.java

package com.example.practica_android;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class BaseDatos_Android extends SQLiteOpenHelper {

private static String CREATE_TABLE = "CREATE TABLE Clientes(Cli_Codigo char(5) not


null PRIMARY KEY, "
+"Cli_Nombre varchar(50)null, "
+"Cli_Telefono char(7)null,"
+"Cli_Ruc char(11)null,"
+"Cli_Direccion TEXT)";
public BaseDatos_Android(Context context, String BdClientes,
CursorFactory factory, int version) {
super(context, BdClientes, factory, version);
// TODO Auto-generated constructor stub
}

@Override
public void onCreate(SQLiteDatabase BD) {
// TODO Auto-generated method stub
BD.execSQL(CREATE_TABLE);
}

@Override
public void onUpgrade(SQLiteDatabase Db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
Db.execSQL("DROP TABLE IF EXISTS Clientes");
Db.execSQL(CREATE_TABLE);
}

EJEMPLO DE BASE DE DATOS


BDHelper.java

package com.practicasemana12;

import org.apache.http.protocol.ExecutionContext;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import

android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class BDHelper extends SQLiteOpenHelper {


public static final String BD="josepoma";
public static final String TA="clientes";
public static final int VE=1;
public static SQLiteDatabase datos;

public BDHelper(Context context) {


super(context, BD, null, VE);
}

@Override
public void onCreate(SQLiteDatabase arg0) {
arg0.execSQL("create table "+TA+" (cli_codigo integer primary key
autoincrement," +
"cli_nombre text ," +
"cli_telefono text ," +
"cli_ruc text ," +
"cli_direccion text);");
}

@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {

public void abrirBD(Context cnt){


datos= new BDHelper(cnt).getWritableDatabase();
}

public void cerrarBD(){


datos.close();
}

public String listar(){


String res="";
String []
columnas={"cli_codigo","cli_nombre","cli_telefono","cli_ruc","cli_direccion"};
Cursor cu = datos.query(TA, columnas, null, null, null, null, null);
for (cu.moveToFirst();!cu.isAfterLast();cu.moveToNext()) {
res+= cu.getString(0)+" "+cu.getString(1)+" "+cu.getString(2)+"
"+cu.getString(3)+" "+cu.getString(4)+"\n";
}
return res;
}

public void insertar(String nombre,String telefono,String ruc, String direcc){


datos.execSQL("insert into
"+TA+"(cli_nombre,cli_telefono,cli_ruc,cli_direccion) " +
"values ('"+nombre+"','"+telefono+"','"+ruc+"','"+direcc+"'); ");
}

public void eliminar(String vari,String cod){


if (vari.equals("ruc")) {
datos.execSQL("delete from "+TA+" where cli_ruc='"+cod+"';");
}else{
if (vari.equals("nombre")) {
datos.execSQL("delete from "+TA+" where
cli_nombre='"+cod+"';");
}else{
if (vari.equals("codigo")) {
datos.execSQL("delete from "+TA+" where
cli_codigo="+Integer.parseInt(cod)+";");
}
}
}

}
/*no usados
public void eliminarxruc(String ruc){
datos.execSQL("delete from "+TA+" where cli_ruc='"+ruc+"';");
}

public void eliminarxnom(String nom){


datos.execSQL("delete from "+TA+" where cli_nombre='"+nom+"';");
}*/

public void actualizar(int cod, String nombre, String direcc){


datos.execSQL("update "+TA+" set cli_nombre='"+nombre+"',
cli_direccion='"+direcc+"' where cli_codigo="+cod+";");
}

Principal.java
package com.practicasemana12;

import com.vistas.Eliminar;
import com.vistas.Registrar;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class Principal extends Activity implements OnClickListener {

Button b1,b2,b3,b4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_principal);
try {
botones();
} catch (Exception e) {
Toast.makeText(Principal.this, e.toString(),
Toast.LENGTH_LONG).show();
}

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

void botones(){
b1= (Button)findViewById(R.id.button1);
b2= (Button)findViewById(R.id.button2);
b3= (Button)findViewById(R.id.button3);
b4= (Button)findViewById(R.id.button4);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent s = new Intent("com.vistas.Registrar");
startActivity(s);
}
});
b2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent s = new Intent("com.vistas.Eliminar");
startActivity(s);
}
});

b3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent s = new Intent("com.vistas.Update");
startActivity(s);
}
});
}

@Override
public void onClick(View v) {
// TODO Auto-generated method stub

Eliminar.java

package com.vistas;

import com.practicasemana12.BDHelper;
import com.practicasemana12.R;
import com.practicasemana12.R.layout;
import com.practicasemana12.R.menu;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

public class Eliminar extends Activity {

BDHelper bh = new BDHelper(Eliminar.this);


Spinner sp;
EditText txt;
Button b;
public String vali="";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_eliminar);
sp=(Spinner)findViewById(R.id.spinner1);
txt=(EditText)findViewById(R.id.editText1);
b=(Button)findViewById(R.id.eliminar);
String [] a = {"ruc","codigo","nombre"};
ArrayAdapter<String> ad = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,a);
sp.setAdapter(ad);

sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
switch (arg2) {
case 0:
vali="ruc";
break;
case 1:
vali="codigo";
break;
case 2:
vali="nombre";
break;
default:
break;
}

@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub

});

b.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
try {
bh.abrirBD(Eliminar.this);
bh.eliminar(vali, txt.getText().toString().trim());
bh.cerrarBD();
} catch (Exception e) {
Toast.makeText(Eliminar.this, e.toString(),
Toast.LENGTH_LONG).show();
}

}
});
}

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

Registrar.java

package com.vistas;

import com.practicasemana12.*;

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;
import android.widget.Toast;

public class Registrar extends Activity {

Button btn;
EditText nombre,telefono,ruc,direcc;
TextView txt1;
BDHelper bh = new BDHelper(Registrar.this);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_registrar);

btn=(Button)findViewById(R.id.btnGrabar);
nombre=(EditText)findViewById(R.id.etxtnombre);
telefono=(EditText)findViewById(R.id.etxtelefono);
ruc=(EditText)findViewById(R.id.etxtruc);
direcc=(EditText)findViewById(R.id.etxtdireccion);
txt1=(TextView)findViewById(R.id.textView1);
try {
bh.abrirBD(Registrar.this);
String rp = bh.listar();
txt1.setText(rp);
bh.cerrarBD();
} catch (Exception e) {
Toast.makeText(Registrar.this, e.toString(),
Toast.LENGTH_LONG).show();
}
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
bh.abrirBD(Registrar.this);
String n=nombre.getText().toString().trim();
String t=telefono.getText().toString().trim();
String r=ruc.getText().toString().trim();
String d=direcc.getText().toString().trim();
bh.insertar(n, t, r, d);
bh.cerrarBD();

nombre.setText("");telefono.setText("");ruc.setText("");direcc.setText("");
bh.abrirBD(Registrar.this);
String rp = bh.listar();
txt1.setText(rp);
bh.cerrarBD();
} catch (Exception e) {
Toast.makeText(Registrar.this, e.toString(),
Toast.LENGTH_LONG).show();
}
}
});
}

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

Update.java

package com.vistas;

import com.practicasemana12.BDHelper;
import com.practicasemana12.R;
import com.practicasemana12.R.layout;
import com.practicasemana12.R.menu;

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.Toast;

public class Update extends Activity {


Button btn;
EditText a,b,c;
BDHelper bh = new BDHelper(Update.this);

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_update);
btn=(Button)findViewById(R.id.button1);
a=(EditText)findViewById(R.id.editText1);
b=(EditText)findViewById(R.id.editText2);
c=(EditText)findViewById(R.id.editText3);
btn.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View arg0) {
try {
bh.abrirBD(Update.this);
int cod=Integer.parseInt(a.getText().toString().trim());
String nombre=b.getText().toString().trim();
String direcc=c.getText().toString().trim();
bh.actualizar(cod, nombre, direcc);
bh.cerrarBD();
a.setText("");b.setText("");c.setText("");

} catch (Exception e) {
// TODO: handle exception
}

}
});

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

CONSUMIR USANDO ANDROID

Consumir Servicios Web WCF con KSOAP2 - Android

A continuación detallo, como consumir servicios web con Android. KSOAP2, REST, y
otros modos alternativos e igualmente útiles serán tratados. El mejor a vuestra elección,
según la carga de la API, el dispositivo, ancho de banda disponible, etc..

De entre los más usuados en la mayoría de los casos se encuentra la librería


independiente KSOAP2 creada para J2ME.. (aún me acuerdo de los cursos de master
que prepare utilizando esto..) .

KSOAP2 es una librería ligera y eficiente, características imprescindibles para su


utilización en entornos de aplicaciones móviles. Desde la página del proyecto
hospedado en Google Code podemos bajarnos la última versión de la librería para
incluir en nuestro proyecto de Eclipse.

Pasos iniciales a seguir:

1- Bajar la última versión del jar (a fecha 7/04/2011) - http://code.google.com/p/ksoap2-


android/source/browse/m2-repo/com/google/code/ksoap2-android/ksoap2-android-
assembly/2.5.4/ksoap2-android-assembly-2.5.4-jar-with-dependencies.jar
2- Crear un proyecto de Android.
3- Incluir la librería en el proyecto de Eclipse.

Bueno... ya estamos listos para utilizarla. Lo primero, vamos a explicar los conceptos
fundamentales.

Necesitamos datos sobre el ENDPOINT, es decir:


1- Dirección url del servicio web.
2- Namespace
3- Método a ejecutar del servicio web.
4- Derivado --> La acción SOAP a ejecutar.

Ejemplo:

1 private static final String url =


2 "http://www.webservicex.net/geoipservice.asmx";
3 private static final String namespace =
4 "http://www.webservicex.net/";
private static final String Metodo_GetGeoIP = "GetGeoIP";
private static final String accionSoap_GetGeoIP =
"http://www.webservicex.net/GetGeoIP";
Una vez identificados los datos que necesitamos, podemos proceder a construir la
solicitud al método del servicio.

1. Primero hemos de identificar los parámetros y el tipo de datos devuelto por el


método del servicio.
2. Una vez identificados, se procede a construir la petición SOAP utilizando la
clase SoapObject.
3. Seguidamente se construye el "sobre" del mensaje SOAP: En la
parametrización, se especifica el tipo de protocolo de comunicación (SOAP1.1 /
1.2, etc..) y como característica especial si el EndPoint es un servicio dotNet
4. A la petición (objeto request) se la añaden los parámetros con el método
AddProperty.
5. Se construye el objeto de transporte para invocar el método (clase
HttpTransportSE).
6. Al invocar al método "call" de la clase "HttpTransportSE" se recogen los
resultados del servicio.
7. Finalmente se recogen los resultados utilizando el objeto devuelto (response) e
invocando al método getProperty.

1 public class ResultadoGeoIPService {


2 private String NombrePais;
3 private String CodigoPais;
4 public String getNombrePais() {
56 return NombrePais; }
7 public void setNombrePais(String nombrePais) {
8 NombrePais = nombrePais;
9 }
10 public String getCodigoPais() { return
11 CodigoPais;
12 }
13 public void setCodigoPais(String codigoPais) {
14 CodigoPais = codigoPais;
15 }}
16
17
18 //... EN LA CLASE PROXY DEL SERVICIO ...
19 public ResultadoGeoIPService GetGeoIP(String IP) throws
20 Exception{ try {
21 SoapObject request = new SoapObject(namespace,
22 Metodo_GetGeoIP);
23 SoapSerializationEnvelope sobre = new
24 SoapSerializationEnvelope(SoapEnvelope.VER11);
25 sobre.dotNet = true;
26 request.addProperty("IPAddress",
27 IP); sobre.setOutputSoapObject(request);
28
29 HttpTransportSE transporte = new
30 HttpTransportSE(url);
31 transporte.call(accionSoap_GetGeoIP, sobre);
32 SoapObject resultado = (SoapObject)
33 sobre.getResponse();
34 ResultadoGeoIPService res=new
35 ResultadoGeoIPService();
36
37 res.setNombrePais(resultado.getProperty("Countr
38 yName").toString());
39 res.setCodigoPais(resultado.getProperty("Countr
40 yCode").toString()); return res;
41
}catch (Exception e){
throw(e);
} }
A continuación dejo un ejemplo de código completo en un proyecto de Eclipse. En este
ejemplo encontrareís:

 La clase "ProxyGeoIPService" que utiliza un servicio web que averigua el país


de una dirección IP. También posee otro método (GetGeoIPContext) que en
función de la dirección IP origen de la petición recibida devuelve el país al que
corresponde la solicitud.
 Una clase "InetManager" que permite obtener la dirección IP del dispositivo
Android.

El código que dispará la invocación al servicio web lo podeís encontrar en el evento


OnClick (OnClickbtnLlamarGeoIPService) del Botón de la interfaz de la actividad
principal.
1 private OnClickListener OnClickbtnLlamarGeoIPService = new
2 OnClickListener() {
3 public void onClick(View v) {
4 ProxyGeoIPService srvGeoIP=new
56 ProxyGeoIPService();
7 String
8 IP=InetManager.getLocalIpAddress();
9 lblIP.setText(IP);
101 try {
1 //ResultadoGeoIPService
12 res=srvGeoIP.GetGeoIP(IP);
13 ResultadoGeoIPService
14 res=srvGeoIP.GetGeoIPContext();
151 lblResultado.setText(res.getNombr
6 ePais());
} catch (Exception e)
{ // TODO Auto-generated catch
block
Log.e(Config.LOGKSOAP,e.toString(
));
}

} };

Vous aimerez peut-être aussi