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

Não aparece o telefone celular na lista de alunos quando é colocado somente um celular.

Só aparece o telefone fixo.

  @Override
    public View getView(int position, View view, ViewGroup viewGroup) {
        View inflate = createView(viewGroup);
        Student studentReturn = students.get(position);
        connects(inflate, studentReturn);
        return inflate;

    }

    private void connects(View inflate, Student student) {
        TextView name = inflate.findViewById(R.id.item_student_name);
        name.setText(student.getName());
        TextView phone = inflate.findViewById(R.id.item_student_phone);
        Telephone firstTelephone = dao.searchFirstTelephone(student.getId());
        if (firstTelephone != null){
            phone.setText(firstTelephone.getNumber());

        }
    }

    private View createView(ViewGroup viewGroup) {
        return LayoutInflater.from(context).inflate(R.layout.item_student, viewGroup, false);
    }

    public void updates(List<Student> students){
        this.students.clear();
        this.students.addAll(students);

        notifiesAdapter();
    }


    public void remove(Student student) {

        students.remove(student);
        Toast.makeText(context, "Aluno removido com sucesso!", Toast.LENGTH_SHORT).show();
        notifiesAdapter();
    }

    private void notifiesAdapter() {
        this.notifyDataSetChanged();
    }

segue o projeto no git: https://github.com/renanparis/Lista_Alunos_Alura.git

8 respostas

Oi Renan, tudo bem?

Vi o seu código atual e o único problema que identifiquei é que ao editar o aluno, primeiro está tentando preencher os campos buscando via banco de dados o telefone, mas, sem instanciar o banco de dados e o DAO respectivamente, ou seja, tá tomando NPE, para isso, basta apenas alterar a ordem, primeiro inicializar o banco e depois os DAO, então, você faz as demais operações. Tudo isso no onCreate() mesmo.

Oi Alex tudo certo e você? O problema do NPE foi resolvido. Mas ainda não achei o problema de não aparecer na lista de alunos o telefone celular no caso de só o campo de celular for preenchido. Esta salvando e editando o telefone celular, mas ele não aparece.

Tudo tranquilo também :)

Sobre o telefone celular não aparecer nada lista, pelo o que eu vi o seu layout não tem um campo para telefone celular, como também, você faz a busca do primeiro telefone que retorna o primeiro telefone salvo para o usuário.

Em outras palavras, você precisa fazer as seguintes modificações:

  1. Buscar todos os telefones do aluno no adapter;
  2. Criar campo para o telefone celular também;
  3. Realizar o processo de bind dos telefones com base no tipo.

[]s

Opa Alex, mas a ideia do curso não era essa? De na activity lista alunos não ter um campo específico para o celular ou telefone fixo, somente um campo telefone que mostraria um telefone,sendo celular ou fixo. Por isso a ideia de no adapter usar o layout de antes e preencher o valor do campo telefone com o numero retornado pelo primeiro numero salvo no banco de dados.

Exato, Renan, a minha resposta foi com o objetivo de indicar como colocaria ambos os telefones, pois a atual vai aparecer sempre o primeiro que vier na busca do primeiro telefone do aluno, geralmente é o fixo, por isso que o celular não aparece se tiver o fixo, para que o celular apareça precisa ser salvo primeiro, ou então, criar mais um campo.

Apenas para deixar claro, o curso não foca na parte visual, portanto, você tem total liberdade para seguir a ideia do curso de apresentar apenas o primeiro ou ambos. Essa decisão foi apenas para ser mais objetivo na feature visual e explorar mais o conteúdo relacionado ao Room :)

Oi Alex, entendi o que quis dizer. Mas acho que não expliquei minha duvida direito. Seguindo a ideia do curso, quando cadastro um aluno sem um telefone fixo, somente com um celular, esse numero de celular deveria aparecer na lista alunos, certo? Fazendo o teste esse numero não aparece, mesmo sendo o único numero cadastrado... e eu não consegui achar o problema no código para resolver.

solução!

Entendi agora o problema, realmente você tem razão, com esta query não é possível, pois o telefone fixo é salvo com valor vazio, ou seja, o registro existe!

Nesse caso, temos algumas alternativas, uma delas é impedir que telefones sejam salvos caso não tenha número, ou então, no momento que buscar o primeiro telefone, colocar a condição de AND com a regra que o número não pode ser vazio conforme a seguinte query

"SELECT t.* FROM  Telephone t " +
            "WHERE t.studentId = :studentId AND" +
            " t.number IS NOT '' LIMIT 1"

Faça o ajuste e veja se agora funciona.

Legal Alex, agora foi! Não manjo muito de sql ainda e não me atentei para esse lado que esta salvando um valor vazio. Agora se adiciono um telefone fixo depois, passa a aparecer o telefone fixo poque ele já era o primeiro registro... Agora ficou claro! Obrigado, Abraços!