1
resposta

Problema com getBaseContext()

Estou desenvolvendo um app: com login, cadastro e etc, e encontrei um problema, quando vou colocar a funcionalidade de verificar login, num código a parte, para separar funções, não deixando que fique varias funcionalidades que podem ser reutilizadas na main_activity, segue o codigo

Main_Activity.java

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "Banco de dados";
    EditText editTextLogin, editTextSenha;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    //Redirecionamento para o cadastro

    public void buttonCadastro(View view) {
        Intent intent = new Intent(this, CadastroActivity.class);
        startActivity(intent);
    }

    ///BotãoEntrar


    public void buttonEntrar(View view) {

        editTextLogin = (EditText) findViewById(R.id.editTextLogin);
        editTextSenha = (EditText) findViewById(R.id.editTextSenha);
        String login = editTextLogin.getText().toString();
        String senha = editTextSenha.getText().toString();

        if(LoginValidacao.PegaDadosEVerifica (login, senha)){

            Intent intent = new Intent(MainActivity.this, TelaInicialActivity.class);
            startActivity(intent);
        }else{
            Log.i(TAG, "Senha Invalida!");
        }

     }
}

LoginValidacao.java (A classe de verificação):

public class LoginValidacao {

    public Boolean PegaDadosEVerifica(String nome, String senha){

        //  Configuração para acesso ao banco de dados
        LoginDadosOpenHelper DBHelper = new LoginDadosOpenHelper(getBaseContext());
        //ATENÇÃO: getReadableDataBase = pegar um banco de dados que pode ser lido
        SQLiteDatabase DB = DBHelper.getReadableDatabase();

        //Cursor é uma classe para "navegar" por uma lista de banco de dados, de acordo com os parametros
        Cursor cursor = DB.rawQuery(
                "SELECT NOME, SENHA " +
                        "FROM LOGIN_CADASTRADO " +
                        "WHERE NOME = ? AND SENHA = ?",
                new String[] {nome, senha});
        //Detalhe pelo sql, "WHERE NOME =? AND SENHA =?" => "=?" é o parametro que ele vai receber
        // E esses parametos são colocados em ordem
        cursor.moveToFirst();
        // .moveToFirst move o cursor para o inicio da lista, podendo se verificar os dados


        if(cursor.getCount() > 0){
            //Se mais resultados com os parametros definidos acima, estiverem corretos
            DB.close();//Em toda situação o banco de dados precisa ser fechado
            return true;
        }
        cursor.close();
        DB.close();
        return false;
    }


}

O que ele reclama é na parte getbaseContext, quando esse codigo de validação esta na main_activity, ele funciona perfeitamente, quando eu separo num código a parte, e chamo o método, ele da esse erro, como se não tivesse o contexto da aplicação, ja tentei seguir as recomendações do app, testar varios codigos, e nada.

Alguém tem uma ideia?

1 resposta

Na sua MainActivity, troca essa linha:

if (LoginValidacao.PegaDadosEVerifica (login, senha)) {

Por:

LoginValidacao validador = new LoginValidacao();
if (validador.PegaDadosEVerifica (login, senha)) {

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software