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

NEP telefone

Olá, pessoal

No link, o Alex tratou o NEP, mas, com a modificação, conforme abaixo com lambda, como posso tratá-la?

private void vincula(View viewCriada, Aluno alunoDevolvido) {
        TextView nome = viewCriada.findViewById(R.id.item_aluno_nome);
        nome.setText(alunoDevolvido.getNomeCompleto() + " " + alunoDevolvido.dataFormatada());
        TextView telefone = viewCriada.findViewById(R.id.item_aluno_telefone);
        new BuscaPrimeiroTelefoneDoAlunoTask(dao, alunoDevolvido.getId(),
                telefoneEncontrado ->
                        telefone.setText(telefoneEncontrado.getNumero())).execute();
    }
12 respostas

Fala Thiago de boa ?

Cara antes de você fazer a chamada, pode fazer a validação e chamar apenas se o valor for válido.

Pois é, Matheus. Não consegui kkkkkkkk

private void vincula(View viewCriada, Aluno alunoDevolvido) {
        TextView nome = viewCriada.findViewById(R.id.item_aluno_nome);
        nome.setText(alunoDevolvido.getNomeCompleto() + " " + alunoDevolvido.dataFormatada());
        TextView telefone = viewCriada.findViewById(R.id.item_aluno_telefone);
        new BuscaPrimeiroTelefoneDoAlunoTask(dao, alunoDevolvido.getId(),
                telefoneEncontrado ->
            if(telefoneEncontrado != null)
                        telefone.setText(telefoneEncontrado.getNumero())).execute();
    }

acho que algo assim deve rolar, imagino.

Deu não... https://imgur.com/NjwoX5U. Esse lambda me deixa confuso aff. Preciso estudar mais sobre ele.

Mostra o código do seu BuscaPrimeiroTelefoneDoAlunoTask

package com.example.agenda.asynctask;

import android.os.AsyncTask;

import com.example.agenda.database.TelefoneDAO;
import com.example.agenda.model.Telefone;

public class BuscaPrimeiroTelefoneDoAlunoTask extends AsyncTask<Void, Void, Telefone> {

    private final TelefoneDAO dao;
    private final int alunoDevolvidoId;
    private final PrimeiroTelefoneEncontradoListener listener;

    public BuscaPrimeiroTelefoneDoAlunoTask(TelefoneDAO dao, int alunoDevolvidoId, PrimeiroTelefoneEncontradoListener listener) {
        this.dao = dao;
        this.alunoDevolvidoId = alunoDevolvidoId;
        this.listener = listener;
    }

    @Override
    protected Telefone doInBackground(Void... voids) {
        return dao.buscaPrimeiroTelefoneDoAluno(alunoDevolvidoId);
    }

    @Override
    protected void onPostExecute(Telefone primeiroTelefone) {
        super.onPostExecute(primeiroTelefone);
        listener.quandoEncontrado(primeiroTelefone);
    }

    public interface PrimeiroTelefoneEncontradoListener {
        void quandoEncontrado(Telefone telefoneEncontrado);
    }
}
private void vincula(View viewCriada, Aluno alunoDevolvido) {
        TextView nome = viewCriada.findViewById(R.id.item_aluno_nome);
        nome.setText(alunoDevolvido.getNomeCompleto() + " " + alunoDevolvido.dataFormatada());
        TextView telefone = viewCriada.findViewById(R.id.item_aluno_telefone);
        new BuscaPrimeiroTelefoneDoAlunoTask(dao, alunoDevolvido.getId(),
               new PrimeiroTelefoneEncontradoListener(){
public void quandoEncontrado(Telefone telefoneEncontrado) {
            if(telefoneEncontrado != null)
                        telefone.setText(telefoneEncontrado.getNumero())).execute();
}
}
    });

tenta algo assim

Deu não... Mesmo com algumas mudanças que ele pediu... rsrs... exportei o projeto, talvez fique mais rápido para me ajudar https://we.tl/t-LoZ35NYX3N

solução!

Oi Thiago, tudo bem?

Provavelmente o problema é de sintax, pegando o seu exemplo:

Observe que você quer adicionar mais de uma instrução utilizando a sintax de uma única instrução na expressão lambda! Por isso que o código não compila... Em casos como esse, basta apenas modificar a sintax para que tenha um corpo (chaves) da expressão lambda, como por exemplo, dessa forma:

        new BuscaPrimeiroTelefoneDoAlunoTask(dao, aluno.getId(),
                telefoneEncontrado -> {
                    if (telefoneEncontrado != null)
                        telefone.setText(telefoneEncontrado.getNumero());
                }
        ).execute();

A sugestão do Matheus, implementação com classe anônima, também deveria funcionar sem problemas, seria o seguinte resultado:

        new BuscaPrimeiroTelefoneDoAlunoTask(dao, aluno.getId(),
                new BuscaPrimeiroTelefoneDoAlunoTask.PrimeiroTelefoneEncontradoListener() {
                    @Override
                    public void quandoEncontrado(Telefone telefoneEncontrado) {
                        if (telefoneEncontrado != null)
                            telefone.setText(telefoneEncontrado.getNumero());
                    }
                }
        ).execute();

Pode fazer o teste e conferir se funciona?

Caso ainda manter o problema com os ajustes, você compartilhar o projeto via GitHub? Dessa forma fica mais fácil de baixar e importar com os arquivos necessários. Caso tenha dúvidas de como pode fazer isso, você pode conferir este tutorial.

[]s

Muitíssimo obrigado, Alex. Deu certo.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software