Erro comparando String!

10 respostas
M

pessoal to tentando checar se um login é válido!!!
que quando clicar no botão saber se o nome e senha foram digitadas! se foram retorne valido, senão invalido…
da o erro de nullpointerexception.
tenho a classe LoginBean, onde tenho os gets e sets de nome e senha!!!
segue o codigo da action:

public class LoginAction {
		
	LoginBean login;
	public LoginAction(){
		 login = new LoginBean();
	}
	
	public void setLogin(LoginBean login){
		this.login = login;
	}
	public LoginBean getLogin(){
		return login;
	}
	public String checkLogin(){
		
		String result = "valid";
		try{
			
			if((login.getNome().length()==0 || (login.getPassword().length()==0))){
				result = "invalid";
				
			}
			
		}catch (Exception e) {
			System.out.println("erro "+e);
			e.printStackTrace();
		 }
		return result;
	}
	

}

10 Respostas

fabiofalci
Há alguma chance de

login

ou

login.getNome()

ou

login.getPassword()

Estarem nulos?
adriano_si

Cadê a comparação de Strings ??

L

como disse o fabiofalci algum nos parametros estam nulos tente isso

  1. public class LoginAction {
  2. LoginBean login;
    
  3. public LoginAction(){
    
  4. login = new LoginBean();
    
  5. }
    
  6. public void setLogin(LoginBean login){
    
  7. this.login = login;
    
  8. }
    
  9. public LoginBean getLogin(){
    
  10. return login;
    
  11. }
    
  12. public String checkLogin(){
    
  13. String result = "valid";
    
  14. try{
    
  15. if(  login.getNome()!= null && login.getPassword()!=null ){
    
  16. if((login.getNome().length()==0 || (login.getPassword().length()==0))){
    
  17. result = "invalid";
    
  18. }
    
  19. }else{  result = "invalid";  }
    
  20. }catch (Exception e) {
    
  21. System.out.println("erro "+e);
    
  22. e.printStackTrace();
    
  23. }
    
  24. return result;
    
  25. }
    
  26. }
Mero_Aprendiz
marcosjava:
public String checkLogin(){
		
		String result = "valid";
		try{
			if((login.getNome().length()==0 || (login.getPassword().length()==0))){
				result = "invalid";
				
			}
			
		}catch (Exception e) {
			System.out.println("erro "+e);
			e.printStackTrace();
		 }
		return result;
	}
}
Nesse código tem algo errado que não está certo. :wink: Você faz:
String result = "valid";
E provavelmente tem algo nulo na comparação. Como o fluxo entra no catch, o valor de result continua como "valid". Veja o que está vindo nulo, para você corrigir, ou tratar de forma correta.

[]'s
JL

M

adriano, não estou querendo comparar a string1 com string2, oque quero eh que se os dois campos forem digitados retornar “valid”, caso contrario retorne “invalid”… acho que errei no nome do topico…
Fabio, quando digito o nome na aplicação ele retorna o valor digitado, mas só que quando estou deixando os campos vazios ele também ta retornando “valid”… tentei usar o metodo equals, mas ta dando erro… alguem pode ajudar?! vlw

M

fiz a alteraçao de Luciano, mas agora so entra no ELSE, linha 23 do seu exemplo. Vc colocou “invalid”, só que mesmo quando informo os valores ele ainda fica invalido, e quando mudo isso para “valid” mesmo nao informando os campos ele fica valid?!?!?!?!

acho que nao ta entrando no IF…

soro

Se você está pegando de um formulário web, ele sempre vai retornar uma string e o valor atribuido nunca vai ser NULL, no caso você está comprado se a string tem tamanho igual a 0, mas um valor em branco é um valor.

Não seria interessante testar se não está em branco?
Coisa como:

if (suaString.equals("")){
  System.out.print("Em branco");
}

Pegando de um form você poderia testar assim, pois todo parametro pegue pelo request sempre vai retornar uma string, se o campo que você pegou ficou em branco então ele vai sertar valor “” para sua String.

M

ok! mas oque eu quero fazer com que seja informado os valores, e queria fazer isso no método checklogin, e não queria usar agora validação! queria testar no java mesmo!!!

quero que o método não aceite se a string nao for informada!!! e se isso acontecer retorne “invalid”. E se os valores nome e senha forem informadas retorne “valid”…

adriano_si

Aí sim entraria a comparação de String com certeza é muito melhor usar o equals("")…

Falows :wink:

T

soro:
Se você está pegando de um formulário web, ele sempre vai retornar uma string e o valor atribuido nunca vai ser NULL, no caso você está comprado se a string tem tamanho igual a 0, mas um valor em branco é um valor.

Não seria interessante testar se não está em branco?
Coisa como:

if (suaString.equals("")){
  System.out.print("Em branco");
}

Pegando de um form você poderia testar assim, pois todo parametro pegue pelo request sempre vai retornar uma string, se o campo que você pegou ficou em branco então ele vai sertar valor “” para sua String.

para fazer essa comparacao, no caso do nosso amigo, basta fazer:

if((login.getNome().trim().length()==0 || (login.getPassword().trim().length()==0))){  
                 result = "invalid";  
                   
             }

o trim retira os espaços em branco. Não se esqueça de validar para casos de nullpointerexception tambem.

Li esses dias no blog do Guilherme Silveira algo interessante para você já pensar:http://guilhermesilveira.wordpress.com/ era o ultimo post, mas nao tenho como te passar o link, tudo que vier do wordpress aqui é proibido.

Criado 29 de julho de 2009
Ultima resposta 29 de jul. de 2009
Respostas 10
Participantes 7