En mi anterior artículo
Android inicio de sesión y registro de diseños de pantalla i se explica el diseño de la interfaz de usuario y de registro, pero no tiene funcionalidad.
En este tutorial estoy explicando cómo construir inicio de sesión
completo y sistema de registro en android usando PHP, MySQL y SQLite. También este tutorial se explica cómo construir API simples usando PHP y MySQL.
Requisitos previos
Este tutorial es una combinación de algunos de mis tutoriales anteriores. Espero que cubrió estos tutoriales antes.
Android hace peticiones HTTP
Android JSON Tutorial de análisis de
Base de datos SQLite Tutorial Android
Android inicio de sesión y registro de diseños de pantalla
API (Application Programming Interface)
⇒ Se aceptan solicitudes por GET / POST métodos
⇒ Interactuar con clases PHP para obtener datos de la base de datos o almacenar en la base de datos
⇒ Por último le dará salida en formato JSON
1. Creación de bases de datos MySQL y tablas
Mientras escribo API en PHP He seleccionado la base de datos MySql para mantener los usuarios y otra información relacionada. Abra la
consola de mysql o
phpmyadmin y ejecutar la consulta siguiente para crear la base de datos y tabla de usuarios.
create database android_api /** Creating Database **/
|
use android_api /** Selecting Database **/
|
create table users(
uid int( 11 ) primary key auto_increment,
unique_id varchar( 23 ) not null unique,
name varchar( 50 ) not null,
email varchar( 100 ) not null unique,
encrypted_password varchar( 80 ) not null,
salt varchar( 10 ) not null,
created_at datetime,
updated_at datetime null
); /** Creating Users Table **/
|
2. Edificio PHP API Clases
Para que sea mínimo traté de utilizar menos cantidad de archivos php. Los siguientes son los archivos son necesarios para construir API en PHP. Usted puede encontrar la descripción de cada archivo de la imagen de abajo.
config.php - Este archivo contiene variables constantes para conectarse a la base de datos.
<?php
define( "DB_HOST" , "localhost" );
define( "DB_USER" , "root" );
define( "DB_PASSWORD" , "" );
define( "DB_DATABASE" , "android_api" );
?>
|
Db_connect.php - Este archivo se utiliza para conectar o desconectar la base de datos.
<?php
class DB_Connect {
function __construct() {
}
function __destruct() {
}
public function connect() {
require_once 'config.php' ;
$con = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
mysql_select_db(DB_DATABASE);
return $con ;
}
public function close() {
mysql_close();
}
}
?>
|
DB_Functions.php - Este archivo contiene funciones para almacenar el usuario en la base de datos, obtener el usuario de base de datos. También puede agregar métodos como actualización, el usuario eliminar.
identificador de usuario único - estoy generando identificador de usuario único en PHP usando
uniqid (", true) función. Identificación del usuario se muestra como
4f074eca601fb8.88015924
Contraseña encriptada - La contraseña se almacena utilizando el método
base64_encode. Cada contraseña se necesitan dos columnas para almacenar en la base de datos. Una es la de almacenar
la contraseña cifrada y la segunda columna es la de almacenar
sal utilizada para cifrar la contraseña.
<?php
class DB_Functions {
private $db ;
function __construct() {
require_once 'DB_Connect.php' ;
$this ->db = new DB_Connect();
$this ->db->connect();
}
function __destruct() {
}
public function storeUser( $name , $email , $password ) {
$uuid = uniqid( '' , true);
$hash = $this ->hashSSHA( $password );
$encrypted_password = $hash [ "encrypted" ];
$salt = $hash [ "salt" ];
$result = mysql_query( "INSERT
INTO users(unique_id, name, email, encrypted_password, salt,
created_at) VALUES('$uuid', '$name', '$email', '$encrypted_password',
'$salt', NOW())" );
if ( $result ) {
$uid = mysql_insert_id();
$result = mysql_query( "SELECT * FROM users WHERE uid = $uid" );
return mysql_fetch_array( $result );
} else {
return false;
}
}
public function getUserByEmailAndPassword( $email , $password ) {
$result = mysql_query( "SELECT * FROM users WHERE email = '$email'" ) or die (mysql_error());
$no_of_rows = mysql_num_rows( $result );
if ( $no_of_rows > 0) {
$result = mysql_fetch_array( $result );
$salt = $result [ 'salt' ];
$encrypted_password = $result [ 'encrypted_password' ];
$hash = $this ->checkhashSSHA( $salt , $password );
if ( $encrypted_password == $hash ) {
return $result ;
}
} else {
return false;
}
}
public function isUserExisted( $email ) {
$result = mysql_query( "SELECT email from users WHERE email = '$email'" );
$no_of_rows = mysql_num_rows( $result );
if ( $no_of_rows > 0) {
return true;
} else {
return false;
}
}
public function hashSSHA( $password ) {
$salt = sha1(rand());
$salt = substr ( $salt , 0, 10);
$encrypted = base64_encode (sha1( $password . $salt , true) . $salt );
$hash = array ( "salt" => $salt , "encrypted" => $encrypted );
return $hash ;
}
public function checkhashSSHA( $salt , $password ) {
$hash = base64_encode (sha1( $password . $salt , true) . $salt );
return $hash ;
}
}
?>
|
index.php - Este archivo se reproduce papel de la recepción de solicitudes y dar respuesta. Este archivo acepta todas las peticiones GET y POST. En cada solicitud se hablará con base de datos y dar respuesta adecuada en formato JSON.
<?php
if (isset( $_POST [ 'tag' ]) && $_POST [ 'tag' ] != '' ) {
$tag = $_POST [ 'tag' ];
require_once 'include/DB_Functions.php' ;
$db = new DB_Functions();
$response = array ( "tag" => $tag , "success" => 0, "error" => 0);
if ( $tag == 'login' ) {
$email = $_POST [ 'email' ];
$password = $_POST [ 'password' ];
$user = $db ->getUserByEmailAndPassword( $email , $password );
if ( $user != false) {
$response [ "success" ] = 1;
$response [ "uid" ] = $user [ "unique_id" ];
$response [ "user" ][ "name" ] = $user [ "name" ];
$response [ "user" ][ "email" ] = $user [ "email" ];
$response [ "user" ][ "created_at" ] = $user [ "created_at" ];
$response [ "user" ][ "updated_at" ] = $user [ "updated_at" ];
echo json_encode( $response );
} else {
$response [ "error" ] = 1;
$response [ "error_msg" ] = "Incorrect email or password!" ;
echo json_encode( $response );
}
} else if ( $tag == 'register' ) {
$name = $_POST [ 'name' ];
$email = $_POST [ 'email' ];
$password = $_POST [ 'password' ];
if ( $db ->isUserExisted( $email )) {
$response [ "error" ] = 2;
$response [ "error_msg" ] = "User already existed" ;
echo json_encode( $response );
} else {
$user = $db ->storeUser( $name , $email , $password );
if ( $user ) {
$response [ "success" ] = 1;
$response [ "uid" ] = $user [ "unique_id" ];
$response [ "user" ][ "name" ] = $user [ "name" ];
$response [ "user" ][ "email" ] = $user [ "email" ];
$response [ "user" ][ "created_at" ] = $user [ "created_at" ];
$response [ "user" ][ "updated_at" ] = $user [ "updated_at" ];
echo json_encode( $response );
} else {
$response [ "error" ] = 1;
$response [ "error_msg" ] = "Error occured in Registartion" ;
echo json_encode( $response );
}
}
} else {
echo "Invalid Request" ;
}
} else {
echo "Access Denied" ;
}
?>
|
Tipos de Respuestas API JSON
Los siguientes son los diferentes tipos de respuestas de JSON generados por API.
Registro de Respuesta Éxito - Éxito Código = 1 (Usuario éxito Almacenado)
{
"tag" : "register" ,
"success" : 1,
"error" : 0,
"uid" : "4f074ca1e3df49.06340261" ,
"user" : {
"name" : "Ravi Tamada" ,
"email" : "ravi8x@gmail.com" ,
"created_at" : "2012-01-07 01:03:53" ,
"updated_at" : null
}
}
|
Registro de respuesta Error - Error Code = 1 (Error en el almacenamiento)
{
"tag" : "register" ,
"success" : 0,
"error" : 1,
"error_msg" : "Error occured in Registartion"
}
|
Registro de respuesta Error - Error Code = 2 (usuario ya existía)
{
"tag" : "register" ,
"success" : 0,
"error" : 2,
"error_msg" : "User already existed"
}
|
Ingresa Respuesta Éxito - Éxito Código = 1 (usuario registrado)
{
"tag" : "login" ,
"success" : 1,
"error" : 0,
"uid" : "4f074eca601fb8.88015924" ,
"user" : {
"name" : "Ravi Tamada" ,
"email" : "ravi8x@gmail.com" ,
"created_at" : "2012-01-07 01:03:53" ,
"updated_at" : null
}
}
|
Login respuesta Error - Error Code = 1 (Ingresar Error - corrige el usuario / contraseña)
{
"tag" : "login" ,
"success" : 0,
"error" : 1,
"error_msg" : "Incorrect email or password!"
}
|
Aquí termina la parte de la API y comenzar el proyecto Android.
3. A partir Android Project
Hasta ahora hemos escrito la programación del lado del servidor para construir api simple. Lo siguiente es construir android aplicación para interactuar con el API. En este proyecto estoy codificación aplicación sencilla que contará con tres pantallas
Pantalla de inicio, pantalla de registro y una
pantalla de
panel de bienvenida. Así que vamos a empezar por la creación de un nuevo proyecto en Eclipse IDE usted.
1. Crear un nuevo proyecto, vaya a Archivo ⇒ Nuevo Android Project. Rellene todos los detalles y el nombre de su actividad como DashboardActivity.
2. El siguiente paso es crear un nuevo paquete para almacenar todos nuestros archivos de biblioteca. Haga clic derecho sobre ⇒ ⇒ New src del paquete ⇒ y el nombre como biblioteca.
Clase analizador JSON
3. Lo siguiente que necesitamos clase analizador para analizar api respuesta JSON. Por lo tanto crear una nueva clase en el nombre del paquete de biblioteca como JSONParser.java y llenarlo con el siguiente código.
JSONParser.java
package com.example.androidhive.library;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;
public class JSONParser {
static InputStream is = null ;
static JSONObject jObj = null ;
static String json = "" ;
public JSONParser() {
}
public JSONObject getJSONFromUrl(String url, List<NameValuePair> params) {
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity( new UrlEncodedFormEntity(params));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader( new InputStreamReader(
is, "iso-8859-1" ), 8 );
StringBuilder sb = new StringBuilder();
String line = null ;
while ((line = reader.readLine()) != null ) {
sb.append(line + "n" );
}
is.close();
json = sb.toString();
Log.e( "JSON" , json);
} catch (Exception e) {
Log.e( "Buffer Error" , "Error converting result " + e.toString());
}
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e( "JSON Parser" , "Error parsing data " + e.toString());
}
return jObj;
}
}
|
Base de datos SQLite controlador de clase
4. En la aplicación para almacenar información del usuario que estoy usando la base de datos SQLite. Así que crear nueva clase en que carpeta paquete de biblioteca y el nombre como DatabaseHandler.java y llenar la clase de código siguiente.
Este archivo de clase tiene funciones para manejar las operaciones de
base de datos como usuario almacenar y fácil de conseguir.

DatabaseHandler.java
package com.example.androidhive.library;
import java.util.HashMap;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseHandler extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1 ;
private static final String DATABASE_NAME = "android_api" ;
private static final String TABLE_LOGIN = "login" ;
private static final String KEY_ID = "id" ;
private static final String KEY_NAME = "name" ;
private static final String KEY_EMAIL = "email" ;
private static final String KEY_UID = "uid" ;
private static final String KEY_CREATED_AT = "created_at" ;
public DatabaseHandler(Context context) {
super (context, DATABASE_NAME, null , DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_LOGIN_TABLE = "CREATE TABLE " + TABLE_LOGIN + "("
+ KEY_ID + " INTEGER PRIMARY KEY,"
+ KEY_NAME + " TEXT,"
+ KEY_EMAIL + " TEXT UNIQUE,"
+ KEY_UID + " TEXT,"
+ KEY_CREATED_AT + " TEXT" + ")" ;
db.execSQL(CREATE_LOGIN_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL( "DROP TABLE IF EXISTS " + TABLE_LOGIN);
onCreate(db);
}
/**
* Storing user details in database
* */
public void addUser(String name, String email, String uid, String created_at) {
SQLiteDatabase db = this .getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_NAME, name);
values.put(KEY_EMAIL, email);
values.put(KEY_UID, uid);
values.put(KEY_CREATED_AT, created_at);
db.insert(TABLE_LOGIN, null , values);
db.close();
}
/**
* Getting user data from database
* */
public HashMap<String, String> getUserDetails(){
HashMap<String,String> user = new HashMap<String,String>();
String selectQuery = "SELECT * FROM " + TABLE_LOGIN;
SQLiteDatabase db = this .getReadableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null );
cursor.moveToFirst();
if (cursor.getCount() > 0 ){
user.put( "name" , cursor.getString( 1 ));
user.put( "email" , cursor.getString( 2 ));
user.put( "uid" , cursor.getString( 3 ));
user.put( "created_at" , cursor.getString( 4 ));
}
cursor.close();
db.close();
return user;
}
/**
* Getting user login status
* return true if rows are there in table
* */
public int getRowCount() {
String countQuery = "SELECT * FROM " + TABLE_LOGIN;
SQLiteDatabase db = this .getReadableDatabase();
Cursor cursor = db.rawQuery(countQuery, null );
int rowCount = cursor.getCount();
db.close();
cursor.close();
return rowCount;
}
/**
* Re crate database
* Delete all tables and create them again
* */
public void resetTables(){
SQLiteDatabase db = this .getWritableDatabase();
db.delete(TABLE_LOGIN, null , null );
db.close();
}
}
|
Funciones de usuario Clase
5. Crear un nuevo archivo de clase en el paquete de biblioteca y el nombre como UserFunctions.java. Esta clase tendrá funciones para manejar todos los eventos de usuario como
loginUser ()
RegisterUser ()
getLoginStatus ()
logoutUser ().
En esta clase de todas las funciones que van a interactuar con las clases, JSONParser DatabaseHandler. Estoy probando API en localhost usando software xampp. Normalmente se ejecuta en localhost puerto http://127.0.0.1 o http://localhost/. En AVD para conectarse a localhost es necesario utilizar
http://10.0.2.2/ url en lugar de
http://localhost/. Si desea implementar el API en la página web del uso de la url http://yoursite.com/api/
UserFunctions.java
package com.example.androidhive.library;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONObject;
import android.content.Context;
public class UserFunctions {
private JSONParser jsonParser;
private static String login_tag = "login" ;
private static String register_tag = "register" ;
public UserFunctions(){
jsonParser = new JSONParser();
}
/**
* function make Login Request
* @param email
* @param password
* */
public JSONObject loginUser(String email, String password){
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add( new BasicNameValuePair( "tag" , login_tag));
params.add( new BasicNameValuePair( "email" , email));
params.add( new BasicNameValuePair( "password" , password));
JSONObject json = jsonParser.getJSONFromUrl(loginURL, params);
return json;
}
/**
* function make Login Request
* @param name
* @param email
* @param password
* */
public JSONObject registerUser(String name, String email, String password){
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add( new BasicNameValuePair( "tag" , register_tag));
params.add( new BasicNameValuePair( "name" , name));
params.add( new BasicNameValuePair( "email" , email));
params.add( new BasicNameValuePair( "password" , password));
JSONObject json = jsonParser.getJSONFromUrl(registerURL, params);
return json;
}
/**
* Function get Login status
* */
public boolean isUserLoggedIn(Context context){
DatabaseHandler db = new DatabaseHandler(context);
int count = db.getRowCount();
if (count > 0 ){
return true ;
}
return false ;
}
/**
* Function to logout user
* Reset Database
* */
public boolean logoutUser(Context context){
DatabaseHandler db = new DatabaseHandler(context);
db.resetTables();
return true ;
}
}
|
El diseño de las pantallas
6. Hasta ahora se han desarrollado las clases de biblioteca necesarios en esta aplicación. Lo siguiente es construir pantallas. Necesitamos tres pantallas Pantalla de inicio, pantalla de registro y pantalla de Dashboard.
Cree 3 archivos xml según Resol ⇒ r disposición folde y nombrarlos como login.xml, register.xml y dashboard.xml
login.xml - Diseño de pantalla de inicio de sesión de diseño
login.xml
<? xml version = "1.0" encoding = "utf-8" ?>
android:layout_width = "fill_parent"
android:layout_height = "fill_parent"
android:background = "#3b3b3b" >
< LinearLayout
android:layout_width = "fill_parent"
android:layout_height = "fill_parent"
android:orientation = "vertical"
android:padding = "10dip" >
< TextView
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:layout_marginBottom = "10dip"
android:text = "LOGIN"
android:textSize = "25dip"
android:textStyle = "bold" />
< TextView
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:text = "Email" />
< EditText
android:id = "@+id/loginEmail"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content" />
< TextView
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:layout_marginTop = "15dip"
android:text = "Password" />
< EditText
android:id = "@+id/loginPassword"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:password = "true" />
< TextView android:id = "@+id/login_error"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:textColor = "#e30000"
android:padding = "10dip"
android:textStyle = "bold" />
< Button
android:id = "@+id/btnLogin"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:layout_marginTop = "20dip"
android:text = "Login" />
< Button
android:id = "@+id/btnLinkToRegisterScreen"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:layout_marginTop = "40dip"
android:background = "@null"
android:text = "I don't have account. Register Me!"
android:textColor = "#21dbd4"
android:textStyle = "bold" />
</ LinearLayout >
</ ScrollView >
|

register.xml - pantalla de registro de esquema de trazado
register.xml
<? xml version = "1.0" encoding = "utf-8" ?>
android:layout_width = "fill_parent"
android:layout_height = "fill_parent"
android:background = "#3b3b3b" >
< LinearLayout
android:layout_width = "fill_parent"
android:layout_height = "fill_parent"
android:orientation = "vertical"
android:padding = "10dip" >
< TextView
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:layout_marginBottom = "10dip"
android:text = "REGISTER"
android:textSize = "25dip"
android:textStyle = "bold" />
< TextView
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:text = "Full Name" />
< EditText
android:id = "@+id/registerName"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content" />
< TextView
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:text = "Email" />
< EditText
android:id = "@+id/registerEmail"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content" />
< TextView
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:layout_marginTop = "15dip"
android:text = "Password" />
< EditText
android:id = "@+id/registerPassword"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:password = "true" />
< TextView android:id = "@+id/register_error"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:textColor = "#e30000"
android:padding = "10dip"
android:textStyle = "bold" />
< Button
android:id = "@+id/btnRegister"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:layout_marginTop = "20dip"
android:text = "Register" />
< Button
android:id = "@+id/btnLinkToLoginScreen"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:layout_marginTop = "40dip"
android:background = "@null"
android:text = "Already registred. Login Me!"
android:textColor = "#21dbd4"
android:textStyle = "bold" />
</ LinearLayout >
</ ScrollView >
|

dashboard.xml - pantalla salpicadero esquema de trazado
dashboard.xml
<? xml version = "1.0" encoding = "utf-8" ?>
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:orientation = "vertical"
android:background = "#3b3b3b" >
< TextView android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:text = "WELCOME"
android:textSize = "40dip"
android:gravity = "center"
android:layout_marginTop = "20dip" />
< Button android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:text = "Logout Me"
android:textSize = "20dip"
android:textColor = "#21dbd4"
android:textStyle = "bold"
android:id = "@+id/btnLogout"
android:layout_marginTop = "80dip"
android:background = "@null" />
</ LinearLayout >
|
El cambio entre Activites
7.
Ahora la parte de diseño de la aplicación se lleva a cabo lo siguiente
es crear actividades para cada diseño y funcionalidad de grabación para
lograr acceso y el proceso de registro.
Crear nuevo LoginActivity.java actividades y RegisterActivity.java y llenarlos con código que aparece más abajo.
LoginActivity.java - Actividad para controlar el evento de inicio de sesión
LoginActivity.java
package com.example.androidhive;
import java.util.HashMap;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import com.example.androidhive.library.DatabaseHandler;
import com.example.androidhive.library.UserFunctions;
public class LoginActivity extends Activity {
Button btnLogin;
Button btnLinkToRegister;
EditText inputEmail;
EditText inputPassword;
TextView loginErrorMsg;
private static String KEY_SUCCESS = "success" ;
private static String KEY_ERROR = "error" ;
private static String KEY_ERROR_MSG = "error_msg" ;
private static String KEY_UID = "uid" ;
private static String KEY_NAME = "name" ;
private static String KEY_EMAIL = "email" ;
private static String KEY_CREATED_AT = "created_at" ;
@Override
public void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.login);
inputEmail = (EditText) findViewById(R.id.loginEmail);
inputPassword = (EditText) findViewById(R.id.loginPassword);
btnLogin = (Button) findViewById(R.id.btnLogin);
btnLinkToRegister = (Button) findViewById(R.id.btnLinkToRegisterScreen);
loginErrorMsg = (TextView) findViewById(R.id.login_error);
btnLogin.setOnClickListener( new View.OnClickListener() {
public void onClick(View view) {
String email = inputEmail.getText().toString();
String password = inputPassword.getText().toString();
UserFunctions userFunction = new UserFunctions();
JSONObject json = userFunction.loginUser(email, password);
try {
if (json.getString(KEY_SUCCESS) != null ) {
loginErrorMsg.setText( "" );
String res = json.getString(KEY_SUCCESS);
if (Integer.parseInt(res) == 1 ){
DatabaseHandler db = new DatabaseHandler(getApplicationContext());
JSONObject json_user = json.getJSONObject( "user" );
userFunction.logoutUser(getApplicationContext());
db.addUser(json_user.getString(KEY_NAME),
json_user.getString(KEY_EMAIL), json.getString(KEY_UID),
json_user.getString(KEY_CREATED_AT));
Intent dashboard = new Intent(getApplicationContext(), DashboardActivity. class );
dashboard.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(dashboard);
finish();
} else {
loginErrorMsg.setText( "Incorrect username/password" );
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});
btnLinkToRegister.setOnClickListener( new View.OnClickListener() {
public void onClick(View view) {
Intent i = new Intent(getApplicationContext(),
RegisterActivity. class );
startActivity(i);
finish();
}
});
}
}
|
RegisterActivity.java - Actividad de manejar evento de registro
LoginActivity.java
package com.example.androidhive;
import org.json.JSONException;
import org.json.JSONObject;
import com.example.androidhive.library.DatabaseHandler;
import com.example.androidhive.library.UserFunctions;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class RegisterActivity extends Activity {
Button btnRegister;
Button btnLinkToLogin;
EditText inputFullName;
EditText inputEmail;
EditText inputPassword;
TextView registerErrorMsg;
private static String KEY_SUCCESS = "success" ;
private static String KEY_ERROR = "error" ;
private static String KEY_ERROR_MSG = "error_msg" ;
private static String KEY_UID = "uid" ;
private static String KEY_NAME = "name" ;
private static String KEY_EMAIL = "email" ;
private static String KEY_CREATED_AT = "created_at" ;
@Override
public void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.register);
inputFullName = (EditText) findViewById(R.id.registerName);
inputEmail = (EditText) findViewById(R.id.registerEmail);
inputPassword = (EditText) findViewById(R.id.registerPassword);
btnRegister = (Button) findViewById(R.id.btnRegister);
btnLinkToLogin = (Button) findViewById(R.id.btnLinkToLoginScreen);
registerErrorMsg = (TextView) findViewById(R.id.register_error);
btnRegister.setOnClickListener( new View.OnClickListener() {
public void onClick(View view) {
String name = inputFullName.getText().toString();
String email = inputEmail.getText().toString();
String password = inputPassword.getText().toString();
UserFunctions userFunction = new UserFunctions();
JSONObject json = userFunction.registerUser(name, email, password);
try {
if (json.getString(KEY_SUCCESS) != null ) {
registerErrorMsg.setText( "" );
String res = json.getString(KEY_SUCCESS);
if (Integer.parseInt(res) == 1 ){
DatabaseHandler db = new DatabaseHandler(getApplicationContext());
JSONObject json_user = json.getJSONObject( "user" );
userFunction.logoutUser(getApplicationContext());
db.addUser(json_user.getString(KEY_NAME),
json_user.getString(KEY_EMAIL), json.getString(KEY_UID),
json_user.getString(KEY_CREATED_AT));
Intent dashboard = new Intent(getApplicationContext(), DashboardActivity. class );
dashboard.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(dashboard);
finish();
} else {
registerErrorMsg.setText( "Error occured in registration" );
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});
btnLinkToLogin.setOnClickListener( new View.OnClickListener() {
public void onClick(View view) {
Intent i = new Intent(getApplicationContext(),
LoginActivity. class );
startActivity(i);
finish();
}
});
}
}
|
DashboardActivity.java - Actividad para controlar el evento salpicadero
LoginActivity.java
package com.example.androidhive;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import com.example.androidhive.library.UserFunctions;
public class DashboardActivity extends Activity {
UserFunctions userFunctions;
Button btnLogout;
@Override
public void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
/**
* Dashboard Screen for the application
* */
userFunctions = new UserFunctions();
if (userFunctions.isUserLoggedIn(getApplicationContext())){
setContentView(R.layout.dashboard);
btnLogout = (Button) findViewById(R.id.btnLogout);
btnLogout.setOnClickListener( new View.OnClickListener() {
public void onClick(View arg0) {
userFunctions.logoutUser(getApplicationContext());
Intent login = new Intent(getApplicationContext(), LoginActivity. class );
login.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(login);
finish();
}
});
} else {
Intent login = new Intent(getApplicationContext(), LoginActivity. class );
login.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(login);
finish();
}
}
}
|
Finalmente Actualización AndroidManifest.xml
No se olvide de actualizar usted AndroidManifest.xml archivo. Cambiar siguientes modificaciones
⇒ Añadir Persmissions Internet
⇒ agregar entradas de cada actividad
AndroidManifest.xml
<? xml version = "1.0" encoding = "utf-8" ?>
package = "com.example.androidhive"
android:versionCode = "1"
android:versionName = "1.0" >
< uses-sdk android:minSdkVersion = "8" />
< application
android:icon = "@drawable/ic_launcher"
android:label = "@string/app_name" >
< activity
android:label = "@string/app_name"
android:name = ".DashboardActivity" >
< intent-filter >
< action android:name = "android.intent.action.MAIN" />
< category android:name = "android.intent.category.LAUNCHER" />
</ intent-filter >
</ activity >
< activity
android:label = "Login Account"
android:name = ".LoginActivity" ></ activity >
< activity
android:label = "Register New Account"
android:name = ".RegisterActivity" ></ activity >
</ application >
< uses-permission android:name = "android.permission.INTERNET" />
</ manifest >
|
8. Asegúrese de que dispone de los archivos colocados como en la siguiente imagen
Ejecute el proyecto, haga clic en su carpeta de proyecto ⇒ ⇒ 1 Ejecutar como aplicación Android.
Autor: Link