Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Validação de campos

Opa Alex, beleza? Muito top o curso você é fera! To aprendendo muito aqui no Alura com Android, muito mesmo! Já sabia algumas coisas, mas aqui eu aprendo certo. uma duvida Eu fiz um metodo para validar os campos. Na verdade apenas o nome do produto, se o usuario não preencher nada ele não deixa ele salvar, lança um toast mas mantem a tela. Porem não ta desse jeito ele salva mesmo assim e deixa o campo vazio na lista

private void validaCampos(String nome, String preco) {
        if (!nome.isEmpty()) {
            produto.setNome(nome);
            if (preco.equals("")) {
                produto.setPreco(0);
            } else {
                produto.setPreco(Double.parseDouble(preco));
            }
        } else {
            Toast.makeText(this, "o Campo produto não pode ficar vazio", Toast.LENGTH_SHORT).show();
        }
    }

Eu chamo ele aqui

    private void preencheProduto() {
        String nome = campoNome.getText().toString();
        String preco = campoPreco.getText().toString();
        validaCampos(nome, preco);
    }

Eu quero o que. se o campo nome produto for vazio, ele entra no else e lança o toast mas ai queria manter na tela de formulario e não deixar ele salvar O que to fazendo de errado? rs Fico no aguardo

4 respostas

Oi Daniel, tudo bem?

Muito obrigado pelo feedback do conteúdo de Android, fico muito contente que esteja aproveitando :)

Considerando o seu código, você precisa de alguma maneira executar a ação de salvar, somente quando o produto está válido.

Para saber se está válido você pode retornar um boolean do método ou lançar uma exceção, vamos considerar o de retorno de boolean:

private boolean validaCampos(String nome, String preco) {
    if (!nome.isEmpty()) {
        produto.setNome(nome);
        if (preco.equals("")) {
            produto.setPreco(0);
        } else {
            produto.setPreco(Double.parseDouble(preco));
        }
        return true;
    }
    Toast.makeText(this, "o Campo produto não pode ficar vazio", Toast.LENGTH_SHORT).show();
    return false;
}

Então, você pode decidir se vai salvar ou não o produto com base no retorno.

[]s

solução!

Opa Felipe, beleza? Poxa show meu caro

O que eu fiz foi o seguinte:

    private void finalizaFormulario() {
        preencheProduto();
        if (!descricao.isEmpty()) {
            produto.setDescricao(descricao);
            if (produto.temIdValido()) {
                produtoDAO.edita(produto);
                mensagemDeAtualizacao();
                finish();
            } else {
                produtoDAO.salva(produto);
                mensagemDeSucesso();
                finish();
            }
        } else {
           mensagemDeAlerta();
        }
    }

verifico se ele esta vazio já no metodo que finaliza o formulario. ai se for ele cai no else e chama o metodo mensagemDeAlerta()

private void mensagemDeAlerta() {
        StyleableToast.makeText(this, "O campo produto não pode estar vazio!", R.style.toastAlerta).show();
    }

Não sei se isso que fiz é uma forma certa rsrs talvez você possa me dizer. Só nesse caso o campo descrição que fiz dessa forma, a validação dos outros eu faço separadamente no metodo, por que neles eu não lanço uma mensagem, ou algo do tipo, eu pego e se o usuario não digitar nada no campo de preço ou quantidade eu já seto como se ele coloca-se 0. Mas valeu meu mesmo querido.

Entendi, o único ajuste seria fazer apenas uma chamada de finish() dado que vc faz isso mesmo se o id for válido ou não, então ficaria da seguinte maneira essa parte:

if (produto.temIdValido()) {
    produtoDAO.edita(produto);
    mensagemDeAtualizacao();
} else {
    produtoDAO.salva(produto);
    mensagemDeSucesso(); 
}
finish();

[]s

Maravilha Alex Felipe Um dia chego no seu nivel haha Abraços e até a proxima!!!!