Login com sqlite no android

Bom dia pessoal,

Criei um login para um aplicativo android onde terá sempre apenas um login. Logo apenas o método update na minha classe dao e preciso construir um outro método para fazer a consulta do login e senha mas estou com dúvidas como fazer isso tanto
na activity principal (comparação login e senha digitado com login e senha no banco) quanto na própria dao segue os códigos.

package com.prototipo.login;
import java.util.ArrayList;
import java.util.List;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.prototipo.activity.Db;
public class LoginDao {
	private String table_name = "Usuario";
	private static Context ctxt;
	public LoginDao(Context ctxt) {
		this.ctxt = ctxt;
	}
		public boolean update(LoginVO vo) {
			SQLiteDatabase db = new Db(ctxt).getWritableDatabase();
			ContentValues ctv = new ContentValues();
			ctv.put("login", vo.getLogin().toString());
			ctv.put("senha", vo.getSenha().toString());
			return db.update(table_name, ctv, "login?", new String[] { vo
					.getLogin().toString() }) > 0;
		}
}
package com.prototipo.login;
import com.prototipo.activity.Principal;
import com.prototipo1.R;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class Login extends Activity {
	Button btnEntrar;
	Button btnCadastrarNovo;
	private EditText edtLogin;
	private EditText edtSenha;
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.login);
		// recuperando botões
		btnEntrar = (Button) findViewById(R.id.btnEntrar);
		btnCadastrarNovo = (Button) findViewById(R.id.btnCadastrarNovo);
		edtLogin = (EditText) findViewById(R.id.edtLogin);
		edtSenha = (EditText) findViewById(R.id.edtSenha);
				// implementar botão
		btnEntrar.setOnClickListener(new View.OnClickListener() {
			// invocando ação ao botão
			public void onClick(View v) {
										startActivity(new Intent(getBaseContext(),
								Principal.class));
			}
		});
		// implementar botão
		btnCadastrarNovo.setOnClickListener(new View.OnClickListener() {
			// invocando ação ao botão
			public void onClick(View v) {
				// esta ação irá fazer mudar de tela após ação do botão
				startActivity(new Intent(getBaseContext(), CadastrarLogin.class));
			}
		});
	}
}
package com.prototipo.login;
public class LoginVO {
	private String id_login;
	private String login;
	private String senha;
	public LoginVO(String login, String senha) {
		super();
		this.login = login;
		this.senha = senha;
	}
	public LoginVO() {
	}
	public String getId_login() {
		return id_login;
	}
	public void setId_login(String id_login) {
		this.id_login = id_login;
	}
	public String getLogin() {
		return login;
	}
	public void setLogin(String login) {
		this.login = login;
	}
	public String getSenha() {
		return senha;
	}
	public void setSenha(String senha) {
		this.senha = senha;
	}
}

Olá, Tente fazer conforme abaixo:

Primeiramente o layout…
res/layout/activity_login.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <EditText
        android:id="@+id/editUsuario"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:ems="10"
        android:hint="Usuário"
        android:inputType="textEmailAddress" >

        <requestFocus />
    </EditText>

    <EditText
        android:id="@+id/editSenha"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/editUsuario"
        android:layout_below="@+id/editUsuario"
        android:layout_marginTop="33dp"
        android:ems="10"
        android:hint="Senha"
        android:inputType="textPassword" />

    <Button
        android:id="@+id/btnValidar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/editSenha"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="46dp"
        android:onClick="validar"
        android:text="Validar" />

</RelativeLayout>

Classe que exdente SQLiteOpenHelper que terá a responsabilidade de criar o nosso banco de dados para o exemplo…

/**
 * 
 */
package com.example.login;

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

/**
 * @author Cristian Chies 10/12/2012
 * 
 */
public class DataBase extends SQLiteOpenHelper {
    private final static int VERSAO = 1;
    private final static String NOME = "nomebanco.sqlite";
    private static final String CREATE = "CREATE TABLE usuario (id INTEGER PRIMARY KEY AUTOINCREMENT, usuario VARCHAR( 20 ) NOT NULL, senha VARCHAR( 8 ));";
    protected SQLiteDatabase database;

    public DataBase(Context context) {
	super(context, NOME, null, VERSAO);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
	db.execSQL(CREATE);	

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
	// TODO Auto-generated method stub

    }

    public SQLiteDatabase getDatabase() {
	if (database == null) {
	    database = getWritableDatabase();
	}
	return database;
    }

}

A Classe que irá representar seu Objeto a ser persistido (Usuário) …

/**
 * 
 */
package com.example.login;

/**
 * @author Cristian Chies 10/12/2012
 * 
 */
public class Usuario {
    private Integer id;
    private String usuario;
    private String senha;
    
    

    /**
     * @param id
     * @param usuario
     * @param senha
     */
    public Usuario(Integer id, String usuario, String senha) {
	this.id = id;
	this.usuario = usuario;
	this.senha = senha;
    }

    /**
     * @return the id
     */
    public Integer getId() {
	return id;
    }

    /**
     * @param id
     *            the id to set
     */
    public void setId(Integer id) {
	this.id = id;
    }

    /**
     * @return the senha
     */
    public String getSenha() {
	return senha;
    }

    /**
     * @param senha
     *            the senha to set
     */
    public void setSenha(String senha) {
	this.senha = senha;
    }

    /**
     * @return the usuario
     */
    public String getUsuario() {
	return usuario;
    }

    /**
     * @param usuario
     *            the usuario to set
     */
    public void setUsuario(String usuario) {
	this.usuario = usuario;
    }

}

O DAO de Usuário…

/**
 * 
 */
package com.example.login;

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

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;

/**
 * @author Cristian Chies 10/12/2012
 * 
 */
public class UsuarioDAO extends DataBase {

    private final String TABLE = "usuario";

    public UsuarioDAO(Context context) {
	super(context);
    }

    public void insert(Usuario usuario) throws Exception {
	ContentValues values = new ContentValues();

	values.put("usuario", usuario.getUsuario());
	values.put("senha", usuario.getSenha());

	getDatabase().insert(TABLE, null, values);
    }

    public void update(Usuario usuario) throws Exception {
	ContentValues values = new ContentValues();

	values.put("usuario", usuario.getUsuario());
	values.put("senha", usuario.getSenha());

	getDatabase().update(TABLE, values, "id = ?", new String[] { "" + usuario.getId() });
    }

    public Usuario findById(Integer id) {

	String sql = "SELECT * FROM " + TABLE + " WHERE id = ?";
	String[] selectionArgs = new String[] { "" + id };
	Cursor cursor = getDatabase().rawQuery(sql, selectionArgs);
	cursor.moveToFirst();

	return montaUsuario(cursor);
    }

    public List<Usuario> findAll() throws Exception {
	List<Usuario> retorno = new ArrayList<Usuario>();
	String sql = "SELECT * FROM " + TABLE;
	Cursor cursor = getDatabase().rawQuery(sql, null);
	cursor.moveToFirst();
	while (!cursor.isAfterLast()) {
	    retorno.add(montaUsuario(cursor));
	    cursor.moveToNext();
	}
	return retorno;
    }

    public Usuario montaUsuario(Cursor cursor) {
	if (cursor.getCount() == 0) {
	    return null;
	}
	Integer id = cursor.getInt(cursor.getColumnIndex("id"));
	String usuario = cursor.getString(cursor.getColumnIndex("usuario"));
	String senha = cursor.getString(cursor.getColumnIndex("senha"));

	return new Usuario(id, usuario, senha);

    }

    /**
     * @param usuario
     * @param senha
     * @return
     */
    public Usuario findByLogin(String usuario, String senha) {
	String sql = "SELECT * FROM " + TABLE + " WHERE usuario = ? AND senha = ?";
	String[] selectionArgs = new String[] { usuario, senha };
	Cursor cursor = getDatabase().rawQuery(sql, selectionArgs);
	cursor.moveToFirst();

	return montaUsuario(cursor);
    }

}

O método findByLogin(String usuario, String senha) é um exemplo de como pode ser feita a consulta no banco…

Agora vamos fazer uma classe de Controle para manipular os dados (pesquise um pouco sobre MVC e Design pattern :D)…

/**
 * 
 */
package com.example.login;

import java.util.List;

import android.content.Context;

/**
 * @author Cristian Chies 10/12/2012
 * 
 */
public class UsuarioController {
    private static UsuarioDAO usuarioDAO;
    private static UsuarioController instance;

    public static UsuarioController getInstance(Context context) {
	if (instance == null) {
	    instance = new UsuarioController();
	    usuarioDAO = new UsuarioDAO(context);
	}
	return instance;
    }

    public void insert(Usuario usuario) throws Exception {
	usuarioDAO.insert(usuario);
    }

    public void update(Usuario usuario) throws Exception {
	usuarioDAO.update(usuario);
    }

    public List<Usuario> findAll() throws Exception {
	return usuarioDAO.findAll();
    }

    public boolean validaLogin(String usuario, String senha) throws Exception {
	Usuario user = usuarioDAO.findByLogin(usuario, senha);
	if (user == null || user.getUsuario() == null || user.getSenha() == null) {
	    return false;
	}
	String informado = usuario + senha;
	String esperado = user.getUsuario() + user.getSenha();
	if (informado.equals(esperado)) {
	    return true;
	}
	return false;

    }

}

Agora a classe que extende Activity…

package com.example.login;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;

public class LoginActivity extends Activity {

    private EditText editUsuario, editSenha;
    private Context context;
    private UsuarioController usuarioController;
    private AlertDialog.Builder alert;

    @Override
    public void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.activity_login);
	context = this;
	usuarioController = UsuarioController.getInstance(context);
	editUsuario = (EditText) findViewById(R.id.editUsuario);
	editSenha = (EditText) findViewById(R.id.editSenha);

	try {
	    testaInicializacao();
	} catch (Exception e) {
	    exibeDialogo("Erro inicializando banco de dados");
	    e.printStackTrace();
	}

    }

    /**
     * @throws Exception
     */
    public void testaInicializacao() throws Exception {
	if (usuarioController.findAll().isEmpty()) {
	    Usuario usuario = new Usuario(null, "cristian", "12345678");
	    usuarioController.insert(usuario);
	}
    }

    /**
     * 
     */
    public void exibeDialogo(String mensagem) {
	alert = new AlertDialog.Builder(context);
	alert.setPositiveButton("OK", null);
	alert.setMessage(mensagem);
	alert.create().show();
    }

    public void validar(View view) {
	String usuario = editUsuario.getText().toString();
	String senha = editSenha.getText().toString();

	try {
	    boolean isValid = usuarioController.validaLogin(usuario, senha);
	    if (isValid) {
		exibeDialogo("Usuario e senha validados com sucesso!");
	    } else {
		exibeDialogo("Verifique usuario e senha!");
	    }
	} catch (Exception e) {
	    exibeDialogo("Erro validando usuario e senha");
	    e.printStackTrace();
	}
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
	getMenuInflater().inflate(R.menu.activity_login, menu);
	return true;
    }

}

Esse é um exemplo bem simples de como implementar espero que ajude… abraço…

1 curtida

Simples mas muito bem explicado vai me ajudar realmente obrigado e valeu as dicas vou pesquisar melhor sobre MVC e Design Pattern. Está certo que para celular fica meio que redundante fazer login e senha mas enfim, é válido o exercício.
Abraço.