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.

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
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 ...