Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

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.