MiLogin: desarrollo de una mini-aplicaci贸n en Android Un buen punto de partida en el que usamos SQLite como motro de base de datos y Eclipse como IDE de desarrollo
Índice de contenido Descripción del mini-proyecto....................................................................................................3 1. Vista inicial: main.xml............................................................................................................3 2. Vista de Login.........................................................................................................................4 3. Ventana de Sign Up (registro de usuarios)..............................................................................4 4. Ventana inicial: si pulsamos botón Sign In, se abre ventana Sign In, si pulsamos Sign Up, se abre ventana Sign Up..................................................................................................................4 Solución.............................................................................................................................5 Creamos el handler de onClick de cada botón.........................................................5 Enlazamos el evento onClick del botón con esta rutina, con este handler...............6 5. Ventana SignUp: Validar datos antes de crear cuenta de usuario............................................6 Solución.............................................................................................................................6 Handler del botón Crear cuenta................................................................................6 6. Ventana SignUp: Guardar usuario en BD...............................................................................7 Solución.............................................................................................................................7 Clase DBHelper: crearla..........................................................................................7 Clase SignUp: buttonSignUp_onClick....................................................................7 7. Ventana SignIn: Validar usuario contra BD............................................................................8 Solución.............................................................................................................................8 Clase DBHelper: agregamos método validateCredentials(username, passwod).....8 Clase SignIn: handler buttonSignIn_onClick...........................................................9
Descripción del mini-proyecto En este tutorial vamos a desarrollar un ejemplo sencillo de Login. El objetivo es comenzar a programar en Android con un ejemplo muy sencillo. La aplicación nos ofrece la siguiente funcionalidad: •
formulario de creación de usuarios, donde un usuario simplemente es un nombre y una clave
•
validación del formulario de creación de usuarios
•
almacén de los usuarios en base de datos SQLite
•
Validación de usuarios registrados, accediendo a base de datos para comprobar que la pareja usuario/clave es correcta.
Vamos a partir el desarrollo en micro-tareas muy sencillas. Descarga el código en https://github.com/moisespd/Android
1. Vista inicial: main.xml Lo primero que creamos es la vista inicial, main.xml Tendrá simplemente dos botones
•
Cambiar el Layout por LinearLayout(Vertical)
•
Al layout marcarle su Gravity como Center Vertically
•
Insertar dos botones
•
A cada botón, cambiarle el Text por Sign In y Sign Up
2. Vista de Login
โ ข
Atributo Hint de los campos de texto
3. Ventana de Sign Up (registro de usuarios)
4. Ventana inicial: si pulsamos botรณn Sign In, se abre ventana Sign In, si pulsamos Sign Up, se abre ventana Sign Up Tan sencillo como eso. Capturar el evento click de cada botรณn, y hacer que se muestre la ventana que corresponda.
Solución Creamos el handler de onClick de cada botón public void buttonSignIn_onClick(View v) { Intent intent = new Intent(getApplicationContext(),SignIn.class); startActivity(intent); }
public void buttonSignIn_onClick(View v) { Intent intent = new Intent(getApplicationContext(),SignIn.class); startActivity(intent); }
Enlazamos el evento onClick del botón con esta rutina, con este handler
5. Ventana SignUp: Validar datos antes de crear cuenta de usuario Simplemente, cuando pulse el botón Crear nueva cuenta nos aseguraremos que: •
El nombre de usuario no está vacío
•
La clave1 y clave2 no están vacías
•
clave1 = clave2
Solución Handler del botón Crear cuenta public void buttonCreateAccount_onClick(View v) { String userName = ((EditText)findViewById(R.id.editTextUserName)).getText().toString(); String password1 = ((EditText)findViewById(R.id.editTextPassword)).getText().toString(); String password2 = ((EditText)findViewById(R.id.editTextPassword2)).getText().toString();
if ((userName.equals("")) || (password1.equals("")) || (password2.equals(""))) { Toast.makeText(getApplicationContext(), "Theare are fields with no value. Please, fill in the information for the new account", Toast.LENGTH_LONG).show();
return; } ... }
6. Ventana SignUp: Guardar usuario en BD Si se validan los datos de usuario, almacenamos usuario en base de datos
Solución Clase DBHelper: crearla
Esta clase será la encargada de interactuar con la base de datos •
Hereda de SQLiteOpenHelper
•
Método onCreate, crea la tabla Login, con 3 campos: Id, username y password
•
Método onUpdate, simplemente elimina la tabla Template e invoca a onCreate
•
Método createUserAccount, es un procedimiento almacenado. Creará el String sql que se ejecuta mediante un db.insert(...)
•
Métodos close y open, que cierran y abren la base de datos
•
Tiene un atributo db de tipo SQLDataBase
Clase SignUp: buttonSignUp_onClick
•
Al final, cuando hemos validado que los campos son correctos, invocamos a dbHelper.CreateUserAccount(...)
public void buttonCreateAccount_onClick(View v) { String userName = ((EditText)findViewById(R.id.editTextUserName)).getText().toString(); String password1 = ((EditText)findViewById(R.id.editTextPassword)).getText().toString();
String password2 = ((EditText)findViewById(R.id.editTextPassword2)).getText().toString();
if ((userName.equals("")) || (password1.equals("")) || (password2.equals(""))) { ... ... Toast.makeText(getApplicationContext(), "Validation OK. All the information needed is correct!", Toast.LENGTH_LONG).show();
DBHelper dbHelper = new DBHelper(getApplicationContext()); dbHelper.createUserAccount(userName, password1); Toast.makeText(getApplicationContext(), "New user account inserted in Database", Toast.LENGTH_LONG).show(); }
7. Ventana SignIn: Validar usuario contra BD Desde la ventana de Sign In, probar que efectivamente, si metemos el nombre de usuario y la clave de una cuenta que hemos creado desde Sign Up, efectivamente valida que las credenciales son correctas
Solución Clase DBHelper: agregamos método validateCredentials(username, passwod)
Este método devolverá true si la pareja username-password coinciden con una entrada de la tabla Login y false en caso contrario public boolean testCredentials(String userName, String password) { openDB();
Cursor cursor = db.rawQuery( "select count(*) “ +
“from Login where Username = '" + userName + "' and Password = '" + password + "'", null);
if (cursor.getCount() < 1) { closeDB(); return false; }
cursor.moveToFirst(); if (cursor.getInt(0) != 1) { closeDB(); return false; }
closeDB(); return true; }
Clase SignIn: handler buttonSignIn_onClick
Invocamos al método testcredentials con los valores que ha insertado el usuario: public void buttonSignIn_onClick(View v) { String userName = ((EditText)findViewById(R.id.editTextUserName)).getText().toString(); String password = ((EditText)findViewById(R.id.editTextPassword)).getText().toString();
DBHelper dbHelper = new DBHelper(getApplicationContext());
if (dbHelper.testCredentials(userName, password)) { Toast.makeText(getApplicationContext(), "Validation OK!!!", Toast.LENGTH_LONG).show(); return; } Toast.makeText(getApplicationContext(), "Username and password do no match!!!", Toast.LENGTH_LONG).show(); }