Ver mensagens sem resposta | Ver tópicos ativos Hoje é 21 Nov 2017, 18:37



Responder Tópico  [ 3 Mensagens ] 
 Login com Sqlite 
Autor Mensagem
Google employee
Google employee

Data de registro: 01 Jul 2013, 13:45
Mensagens: 2688
Localização: Rio de Janeiro
Mensagem Login com Sqlite
Algo bem legal de se usar em nossos aplicativos, é implementar um sistema de login. Criei então um aplicativo de teste que necessita de login para ser usado, vou postar aqui no fórum pra dar uma base a alguém que venha a precisar de algo parecido.
O projeto tá bem simples, nem foi preciso comentar.

A primeira classe criada é o modelo de um usuário cadastrado:


public class Usuario extends Object implements Serializable {
   
    private long id;
    private String nomeDeUsuario = "nome";
    private String senha = "senha";
   
    private String nome = "nome";
    private String sobrenome = "sobrenome";
    private int idade = 0;
   
    // getters e setters aqui
}
 


Uma classe auxiliar pra guardar as instruções sql que serão usadas:


public class SQL extends Object {
   
    protected static final String TABELA = "usuario";
    protected static final String NOME_DE_USUARIO = "nomeDeUsuario";
    protected static final String SENHA = "senha";
   
    protected static final String NOME = "nome";
    protected static final String SOBRENOME = "sobrenome";
    protected static final String IDADE = "idade";
   
    protected static final String CRIA_TABELA_USUARIO = "CREATE TABLE "
     + "usuario (id INTEGER PRIMARY KEY AUTOINCREMENT, nomeDeUsuario TEXT, "
     + "senha TEXT, nome TEXT, sobrenome TEXT, idade INTEGER);";
   
    protected static final String DELETA_TABELA_USUARIO = "DROP TABLE usuario";
   
}
 


A classe responsável por criar a base de dados:


public class LoginSqliteOpenHelper extends SQLiteOpenHelper {
   
    private static final String nome = "login-sqlite";
    private static final int versao = 1;
   
    public void onCreate(SQLiteDatabase bd) {
        bd.execSQL(SQL.CRIA_TABELA_USUARIO);
    }
   
    public void onUpgrade(SQLiteDatabase bd, int oldVersion, int newVersion) {
        bd.execSQL(SQL.DELETA_TABELA_USUARIO);
        onCreate(bd);
    }
   
    public LoginSqliteOpenHelper(Context c) {
        super(c, nome, null, versao);
    }
}
 


E a classe Dao, responsável por controlar os acessos à base de dados.


public class Dao extends Object {
   
    private LoginSqliteOpenHelper loginSqlite;
    private Context contexto;
    private static Dao dao;
   
    public synchronized static Dao getDao(Context c) {
        if (dao == null) {
            dao = new Dao(c);
        }
        return dao;
    }
   
    public void salva(Usuario usuario) {
        ContentValues valor = new ContentValues();
       
        valor.put(SQL.NOME_DE_USUARIO, usuario.getNomeDeUsuario());
        valor.put(SQL.SENHA, usuario.getSenha());
        valor.put(SQL.NOME, usuario.getNome());
        valor.put(SQL.SOBRENOME, usuario.getSobrenome());
        valor.put(SQL.IDADE, usuario.getIdade());
       
        SQLiteDatabase sqlite = loginSqlite.getWritableDatabase();
       
        try {
            sqlite.insert(SQL.TABELA, null, valor);
        } finally {
            sqlite.close();
        }
    }
   
    public Usuario getUsuario(String nome, String senha) {
        Usuario usuario = null;
        SQLiteDatabase sqlite = loginSqlite.getReadableDatabase();
       
        String sql = "SELECT * FROM usuario WHERE nomeDeUsuario = '" + nome + "' AND senha = '" + senha + "'";
        Cursor cursor = sqlite.rawQuery(sql, null);
       
        try {
            if (cursor.moveToNext()) {
                usuario = new Usuario();
               
                usuario.setId(cursor.getLong(0));
                usuario.setNomeDeUsuario(cursor.getString(1));
                usuario.setSenha(cursor.getString(2));
               
                usuario.setNome(cursor.getString(3));
                usuario.setSobrenome(cursor.getString(4));
                usuario.setIdade(cursor.getInt(5));
            }
        } finally {
            cursor.close();
            sqlite.close();
        }
        return usuario;
    }
   
    private Dao(Context c) {
        contexto = c;
        loginSqlite = new LoginSqliteOpenHelper(contexto);
    }
}
 


Depois as classes Cadastro, Login, e Sistema. Essa última só é chamada caso o login seja efetuado corretamente.


public class Cadastro extends Activity {
   
    private Button confirmar, cancelar;
    private EditText nomeDeUsuario, senha;
    private EditText nome, sobrenome, idade;
   
    private Dao dao;
   
    @Override
    protected void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView(R.layout.cadastro);
       
        dao = Dao.getDao(this);
       
        confirmar = (Button) findViewById(R.cadastro.confirmar);
        confirmar.setOnClickListener(oclConfirmar);

        cancelar = (Button) findViewById(R.cadastro.cancelar);
        cancelar.setOnClickListener(oclCancelar);
       
        nomeDeUsuario = (EditText) findViewById(R.cadastro.nome_de_usuario);
        senha = (EditText) findViewById(R.cadastro.senha);
       
        nome = (EditText) findViewById(R.cadastro.nome);
        sobrenome = (EditText) findViewById(R.cadastro.sobrenome);
        idade = (EditText) findViewById(R.cadastro.idade);
    }
   
    private OnClickListener oclConfirmar = new OnClickListener() {
        public void onClick(View v) {
            Usuario usuario = new Usuario();
           
            usuario.setNomeDeUsuario(getString(nomeDeUsuario));
            usuario.setSenha(getString(senha));
           
            usuario.setNome(getString(nome));
            usuario.setSobrenome(getString(sobrenome));
            usuario.setIdade(Integer.valueOf(getString(idade)));
           
            dao.salva(usuario);
            finish();
        }
    };
   
    private OnClickListener oclCancelar = new OnClickListener() {
        public void onClick(View v) {
            finish();
        }
    };
   
    private String getString(EditText campo) {
        return campo.getText().toString();
    }
 



public class Login extends Activity {
   
    private Button entrar, cadastrar;
    private EditText nome, senha;
   
    private Dao dao;
   
    @Override
    protected void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView(R.layout.login);
       
        dao = Dao.getDao(this);
       
        entrar = (Button) findViewById(R.login.entrar_no_sistema);
        entrar.setOnClickListener(oclEntrar);
       
        cadastrar = (Button) findViewById(R.login.cadastrar_novo_usuario);
        cadastrar.setOnClickListener(oclCadastrar);
       
        nome = (EditText) findViewById(R.login.nome_de_usuario);
        senha = (EditText) findViewById(R.login.senha);
    }
   
    private OnClickListener oclEntrar = new OnClickListener() {
        public void onClick(View v) {
            Usuario usuario = dao.getUsuario(getString(nome), getString(senha));
            Intent i = new Intent(Login.this, Sistema.class).putExtra("usuario", usuario);
           
            if (usuario != null) {
                startActivity(i);
            } else {
                Toast.makeText(Login.this, "Usuário inválido!", Toast.LENGTH_SHORT).show();
            }
        }
    };
   
    private OnClickListener oclCadastrar = new OnClickListener() {
        public void onClick(View v) {
            startActivity(new Intent(Login.this, Cadastro.class));
        }
    };
   
    private String getString(EditText campo) {
        return campo.getText().toString();
    }
}
 



public class Sistema extends Activity {
   
    private TextView nomeDeUsuario, senha;
    private TextView nome, sobrenome, idade;
   
    @Override
    protected void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView(R.layout.sistema);
       
        Usuario usuario = (Usuario) getIntent().getSerializableExtra("usuario");
       
        nomeDeUsuario = (TextView) findViewById(R.sistema.nome_de_usuario);
        senha = (TextView) findViewById(R.sistema.senha);
       
        nome = (TextView) findViewById(R.sistema.nome);
        sobrenome = (TextView) findViewById(R.sistema.sobrenome);
        idade = (TextView) findViewById(R.sistema.idade);
       
        nomeDeUsuario.setText("Nome de Usuário: " + usuario.getNomeDeUsuario());
        senha.setText("Senha: " + usuario.getSenha());
       
        nome.setText("Nome: " + usuario.getNome());
        sobrenome.setText("Sobrenome: " + usuario.getSobrenome());
        idade.setText("Idade: " + usuario.getIdade());
    }
}
 


Por estar bem simples não dá pra fazer muita coisa com esse exemplo, mas em um aplicativo de verdade seria legal colocar um ProgressBar durante a confirmação de cadastro enquanto verifica numa AsyncTask o de usuário já existe. No momento do login fazer as verificações de campos vazios, pro teu a aplicativo deixar uma boa impressão.

_________________
Quando seu problema for resolvido, clique na opção Editar no lado superior direito da sua primeira mensagem e coloque [Resolvido] no título.
Se resolveu o problema sozinh@, não esqueça de postar a solução, ela ajuda usuários em buscas no fórum.
Use os marcadores java e xml quando for postar.

Aprenda Java com esta apostila.


10 Abr 2014, 11:59
Perfil WWW
Google employee
Google employee

Data de registro: 28 Jun 2012, 19:13
Mensagens: 1308
Localização: Itaperuna-RJ
Mensagem Re: Login com Sqlite
Bacana Kaito, minha única dica seria para não salvar a senha da forma que está sendo, adicione alguma criptografia(MD5) e salve a senha criptografada, é muito mais seguro. Vlw man!

_________________
Powell


10 Abr 2014, 18:17
Perfil
Google employee
Google employee

Data de registro: 01 Jul 2013, 13:45
Mensagens: 2688
Localização: Rio de Janeiro
Mensagem Re: Login com Sqlite
Obrigado pela dica, raphael! :D Por ser um projeto simples eu nem me preocupei, foi mais pra dar uma ideia de como funciona esse tipo de coisa à quem precisar em algum aplicativo. Mas pretendo fazer alterações no projeto pra deixá-lo mais seguro, valeu!

_________________
Quando seu problema for resolvido, clique na opção Editar no lado superior direito da sua primeira mensagem e coloque [Resolvido] no título.
Se resolveu o problema sozinh@, não esqueça de postar a solução, ela ajuda usuários em buscas no fórum.
Use os marcadores java e xml quando for postar.

Aprenda Java com esta apostila.


10 Abr 2014, 18:43
Perfil WWW
Mostrar mensagens anteriores:  Organizar por  
Responder Tópico   [ 3 Mensagens ] 

Quem está online

Usuários vendo este fórum: adilson, aechiara, afpcp, alex, alexandreizumi, alexandrepom, amos, anaguerra, Analista, arkanjo, arquivo51, Augusto, augustomig, azero, b7web, berchielli, Beru Lars, Biel, bigr ecreio, BOMBER27, cabelo, Caique, careisjr, carminati, Chassot, claudio, claudioalfonso, Cleiton, comolatti, compto, craudiao, dallari, dalmeidabr, dariosena, Darth Sidious, dbispo, dchechetto, Deiapinh, difrene, diogeneskelsen, dirceuconte, DITÃO, dmd, dnakamashi, Dorpho, Douglas Siviotti, Emanuella, everaldo, fabielp, felipedornelas, Fernando Cardia, flaviohssantos, fracon, germanno, Guilherme Cobain, GuilhermeZampieri, guitarro17, gustavo, gustavobarbosa, hostdesigner, igor_meneguzzo, IgorBrum, jackdaniel, jacksonst, jairodealmeida, Javanês, johnnyjx, juliherms, juliomar, JuniorE, juniorfranca, juniorsk8, kpinheiro, leanderdulac, leoadias, LordElfo, lucianoalves, Mace Windu, malucouto, marcelocastellani, marciosoliveira, marianatallas, martins, mauriciobreide, mauriciomag, mayahaslinger, Mayron Cimardi, miguel, Moisés Souto, MpassosT, nandokanarski, nandopierre, nardosnt, neosun, Newton Barbosa, Nice, Nidio Dolfini, oliverlessa, Orivalde, paint-horse, Paulo, pemam.com.br, persiomotta, Philipe Alves, pilon, pomarolli, Rafael Alencar, Rainha Amidala/Padmé, regis.ror, renatodondoni, renegheller, rguadagnini, ricardoogliari, rmendes, rodrigo aguiar, rodrigo_mg, rogerio, Rogério, Rufino, sasuke_sarutobi, scattonevi, sergio, SERGIO RODRIGUES, shadow, siker C3PO, srmoreira, Telekom [Bot], Tiago Sousa Roch, Toks, valaszek, Vector, weber, wesley.messias, Wesleyceraso, WiseNut, Yoshihury, zaquiel e 1 visitante


Você não pode criar novos tópicos neste fórum
Você não pode responder tópicos neste fórum
Você não pode editar suas mensagens neste fórum
Você não pode excluir suas mensagens neste fórum
Você não pode enviar anexos neste fórum

Procurar por:

© 2007 - 2016 Portal Android - Comunidade de Desenvolvedores Android

Estamos no Linkedin    Siga-nos no twitter


Powered by phpBB - Hospedado por Bemobi