public class Usuario {
private String Name = "";
private String Email = "";
private String UID = "";
private static String KEY_SUCCESS = "success";
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";
private static String KEY_USER = "user";
private static String loginURL = "URL DEL SERVIDOR/index.php";
private static String registerURL = "URL DEL SERVIDOR/index.php";
private static String login_tag = "login";
private static String register_tag = "register";
private Activity activity;
public void login(Activity activity, String email, String password){
this.activity = activity;
HttpClientManager httpclient = new HttpClientManager(activity);
httpclient.addNameValue("tag", login_tag);
httpclient.addNameValue("email", email);
httpclient.addNameValue("password", password);
httpclient.setOnExecuteHttpPostAsyncListener(new OnExecuteHttpPostAsyncListener() {
@Override
public void onExecuteHttpPostAsyncListener(String ResponseBody) {
try {
JSONObject json = new JSONObject(ResponseBody);
if (json.getString(KEY_SUCCESS) != null) {
if((Integer.parseInt(json.getString(KEY_SUCCESS)) == 1)){
if(Usuario.this.saveLogin(Usuario.this.activity, json))
ListenerLoginUsuario.onLoginCorrect(json, "Login correcto");
else
ListenerLoginUsuario.onLoginWrong("Login incorrecto");
} else {
ListenerLoginUsuario.onLoginWrong("Login incorrecto");
}
} else{
ListenerLoginUsuario.onLoginWrong("Login incorrecto");
}
} catch (JSONException e) {
ListenerLoginUsuario.onLoginWrong("Login incorrecto");
}
}
@Override
public void onErrorHttpPostAsyncListener(String message) {
}
});
httpclient.executeHttpPost(loginURL);
}
public void register(Activity activity, String username, String email, String password){
this.activity = activity;
HttpClientManager httpclient = new HttpClientManager(activity);
httpclient.addNameValue("tag", register_tag);
httpclient.addNameValue("name", username);
httpclient.addNameValue("email", email);
httpclient.addNameValue("password", password);
httpclient.setOnExecuteHttpPostAsyncListener(new OnExecuteHttpPostAsyncListener() {
@Override
public void onExecuteHttpPostAsyncListener(String ResponseBody) {
try {
JSONObject json = new JSONObject(ResponseBody);
if (json.getString(KEY_SUCCESS) != null) {
if((Integer.parseInt(json.getString(KEY_SUCCESS)) == 1)){
if(Usuario.this.saveLogin(Usuario.this.activity, json))
ListenerRegisterUsuario.onRegisterFinish(json, "Registro correcto");
else
ListenerRegisterUsuario.onRegisterFail("Estás registrado pero no puedes loguearte ahora");
}else
ListenerRegisterUsuario.onRegisterFail("Error durante el registro");
} else {
ListenerRegisterUsuario.onRegisterFail("Error durante el registro");
}
} catch (JSONException e) {
ListenerRegisterUsuario.onRegisterException(e, "Error durante el registro");
}
}
@Override
public void onErrorHttpPostAsyncListener(String message) {
}
});
httpclient.executeHttpPost(registerURL);
}
private boolean saveLogin(Activity activity, JSONObject json){
boolean save = false;
this.logout(activity);
try {
JSONObject user = json.getJSONObject(KEY_USER);
DBLogin dblogin = new DBLogin(activity);
dblogin.addUser(user.getString(KEY_NAME), user.getString(KEY_EMAIL), json.getString(KEY_UID), user.getString(KEY_CREATED_AT));
dblogin.close();
save = true;
} catch (JSONException e) {}
return save;
}
public void logout(Activity activity){
DBLogin dblogin = new DBLogin(activity);
dblogin.resetTables();
dblogin.close();
}
public boolean isUserLoggedIn(Activity activity){
DBLogin db = new DBLogin(activity);
int count = db.getRowCount();
db.close();
if(count > 0){
// user logged in
return true;
}
return false;
}
public void readUser(Activity activity){
DBLogin dblogin = new DBLogin(activity);
Cursor cursor = dblogin.getCursorUsuario();
if(cursor.moveToNext()){
this.setName(cursor.getString(0));
this.setEmail(cursor.getString(1));
this.setUID(cursor.getString(2));
}
cursor.close();
dblogin.close();
}
public interface OnRegisterUsuario{
void onRegisterFinish(JSONObject json, String msg);
void onRegisterException(Exception e, String msg);
void onRegisterFail(String msg);
}
private OnRegisterUsuario ListenerRegisterUsuario;
public void setOnRegisterUsuario(OnRegisterUsuario l){ListenerRegisterUsuario = l;}
public interface OnLoginUsuario{
void onLoginCorrect(JSONObject json, String msg);
void onLoginWrong(String msg);
}
private OnLoginUsuario ListenerLoginUsuario;
public void setOnLoginUsuario(OnLoginUsuario l){ListenerLoginUsuario = l;}
public String getName() {return Name;}
public void setName(String name) {Name = name;}
public String getEmail() {return Email;}
public void setEmail(String email) {Email = email;}
public String getUID() {return UID;}
public void setUID(String uID) {UID = uID;}
}
private String SQLCreateLogin = "CREATE TABLE login("
+ " id INTEGER PRIMARY KEY,"
+ " name TEXT,"
+ " email TEXT UNIQUE,"
+ " uid TEXT,"
+ " created_at TEXT" + ")";
Y en el onCreate ejecutais:
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(SQLCreateLogin);
}
Vamos con la clase DBLogin ahora:
public class DBLogin extends bbdd {
public static String Table = "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 DBLogin(Context context) {
super(context);
}
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, null, values);
db.close();
}
/**
* Obtener usuario de la base de datos
* */
public HashMap<String, String> getUserDetails(){
HashMap<String,String> user = new HashMap<String,String>();
String selectQuery = "SELECT * FROM " + Table;
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;
}
public int getRowCount() {
String countQuery = "SELECT * FROM " + Table;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(countQuery, null);
int rowCount = cursor.getCount();
db.close();
cursor.close();
return rowCount;
}
public Cursor getCursorUsuario(){
SQLiteDatabase db = getReadableDatabase();
return db.rawQuery("SELECT name, email, uid " +
" FROM "+Table
, null);
}
public void resetTables(){
SQLiteDatabase db = this.getWritableDatabase();
db.delete(Table, null, null);
db.close();
}
}
Usuario usuario = new Usuario();
if(usuario.isUserLoggedIn(this))
usuario.readUser(this);
else
navegarALogin();