1
respuesta

Inicio de sesión -ERROR Cannot invoke "Controllers.ValidadorDeCredenciales.ValidaCredencial()" because "this.validar" is null

Hola, tengo el siguiente error, pero no sé si estoy armando bien las clases. Tengo la clase ValidadorDeCredenciales:

package Controllers;

import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement;

import Factory.ConnectionFactory;

public class ValidadorDeCredenciales { public Object[] ValidaCredencial()throws SQLException { String usuario = ""; String clave =""; Connection conn = new ConnectionFactory().recuperaConexion(); Statement statement = conn.createStatement(); ResultSet resultSet = statement.executeQuery("SELECT usuario, clave FROM usuarios" );

    if (resultSet.next()) {
         usuario = resultSet.getString("usuario");
         clave = resultSet.getString("clave");
    }
    return new Object[]{usuario,clave};

}
Mi idea es que me devuelva el valor del usuario y la clave para comparar con las ingresadas por teclado por el usuario en la clase Login. Traté de recibir el Object[], pero me da error y ahora intento con convertir en Strin el Object y guardar el contenido en un String pero me da error

private void Login() throws SQLException {
    // Object[] Usuario= null;
     //Object[] Contraseña = null;
     String Usuario = "";
     String Contraseña = "";
     Usuario = Arrays.toString(validar.ValidaCredencial());
     Contraseña = Arrays.toString( validar.ValidaCredencial());
    //  Usuario[1] = validar.ValidaCredencial();
    // Contraseña[2] = validar.ValidaCredencial(); 

        String contrase=new String (txtContrasena.getPassword());

        if(txtUsuario.getText().equals(Usuario) && contrase.equals(Contraseña)){
            MenuUsuario menu = new MenuUsuario();
            menu.setVisible(true);
            dispose();     
        }else {
            JOptionPane.showMessageDialog(this, "Usuario o Contraseña no válidos");
        }
} 

} EL ERROR ES: Cannot invoke "Controllers.ValidadorDeCredenciales.ValidaCredencial()" because "this.validar" is null

1 respuesta

Buenas, el error te indica que validar es nulo eso quiere decir que en algún punto de tu codigo se pierden los valores o no llegan. Vamos desde el inicio

  • Revisa si tu ResultSet está devolviendo el usuario y contraseña
  • En tu metodo Login() no estás extrayendo los valores de usuario y contraseña del objeto debido a que estas usando Usuario = Arrays.toString(validar.ValidaCredencial()); la manera correcta de extraer las variable de un objeto es la siguiente:
    String Usuario = "";
       String Contraseña = "";
       Object[] credenciales = validar.ValidaCredencial();
       Usuario = credenciales[0].toString();
       Contraseña = credenciales[1].toString();
    Puedes usar las respuestas de consola o el debugger para identificar en donde se pierden los datos.

¿Me entra la cursiodad el por que usar un objeto para el return?