13
respostas

o operador "!=" não permite valor diferente de "null" quando for LONG

No momento que insiro o código do ItemSelected ele não me permite inserir um valor nulo dentro do IF

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_formulario_ok:
                Aluno aluno = helper.pegaNome();
                AlunoDAO dao = new AlunoDAO(this);
                if (aluno.getId() != null) {
                    dao.alterar(aluno);
                }else{
                    dao.insere(aluno);
                }

                dao.close();
                Toast.makeText(FormularioActivity.this, "Aluno "+aluno.getNome()+" Salvo! ", Toast.LENGTH_SHORT).show();
                finish();
            break;
        }

O Android Studio da o seguinte alerta:

Operator '!=' cannot be applied to 'long', 'null'

Não sei se é minha versão do android Studio. Já tentei ate alterar a variavel do ID para um int mas sem chance de dar certo.

Ja ate alterei o código para:

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_formulario_ok:
                Aluno aluno = helper.pegaNome();
                AlunoDAO dao = new AlunoDAO(this);
                if (aluno.getId() != 0) {
                    dao.alterar(aluno);
                }else{
                    dao.insere(aluno);
                }

                dao.close();
                Toast.makeText(FormularioActivity.this, "Aluno "+aluno.getNome()+" Salvo! ", Toast.LENGTH_SHORT).show();
                finish();
            break;
        }

Alterando o IF para diferente de 0 .... mas mesmo assim nada feito.

Gostaria da ajuda de vc's para poder concluir este módulo e ir para o próximo.

13 respostas

Se não me engano, você não pode comparar tipos primitivos (int, long, float) com null, agora seu segundo caso me deixou um pouco confuso, a mensagem foi igual ou diferente de alguma forma? Tenho a impressão que usar > 0 deve funcionar.

Bom dia Matheus, tente alterar seu código para o seguinte:

if (aluno.getId() != 0L) {
     dao.alterar(aluno);
 }

Nesse código, a única alteração foi a inclusão da letra L depois do número 0, que indica que o número antes da letra é um Long.

Para o Java o número 0 nada mais é do que um número inteiro, por esse motivo devemos dizer para o compilador que esse 0 se trata de um Long.

Não é apenas com Long que ocorre esse problema, se você tentar criar um float vai perceber que isso também ocorre, e ai, basta adicionar a letra F depois do número que tudo se resolve!

Espero ter ajudado! Abraços e bons estudos!

Então Rodrigo o que acontece é que se tento comparar tipos primitivos tanto colocando da maneira inicial quanto ">0" como havia me instruído, o android no momento em que vou salvar a alteração inclui mais um item na lista e não edita. De alguma maneira ele não esta passando pelo IF.

Então Leonardo tentei da maneira como me passou e tbm não consegui .... o android não acusa erro, mas no momento em que vou salvar a alteração inclui mais um item na lista e não edita. E o mais estranho Leonardo é que no video ele usa esta mesma comparação dentro do IF com "null"

Mesmo erro.



    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_form_save:
                ...

                if (student.getId() != null) {
                    dao.edit(student);
                } else {
                    dao.insert(student);
                }

                dao.close();

                ...
        }
    ...
    }

Erro no if student.getId() != null, Operator cannot be applied to Long. Beleza, inverti o if. Comparei com == e outras tentativas. Não consegui, mesmo erro.

Faz o seguinte cara, da um sysout no aluno.getId() pra gente ter certeza o que você esta comparando em tempo de execução, porque você comparar com 0L deveria ser a solução pra esse caso.

Como eu vejo o resultado do System.out.println(student.getId()); ? Coloco ele dentro ou fora do if? Tentei fora do if mas sempre que clico no item o app fecha.

Comenta toda essa parte que executa a logica de edit ou insert e troca pelo sysout, ai não deve dar crash

Resolvido, Rodrigo. Obrigado pelo suporte.

De nada cara, estamos aqui pra ajudar mesmo.

Explica aqui qual foi a causa do problema e a solução, assim se olharem no futuro esse problema vai ter explicado.

Thiago, coloca a solução ai pra ajudar a comunidade rsrsrs , tentei fazer o debug mais sem chance.

Não entendi a Solução, alguém pode ajudar?

Não tenho certeza se me lembro corretamente, mas se n me engano, tipos primitivos (int, float, long, double) nunca podem ser nulos, pois apenas objetos são nulos. Ai a comparação de long com null não faz sentido

Então como posso proceder diante disso Rodrigo? Por que nas video aulas deu certo ...