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

Problemas ao implementar parcel para enviar dados entre as Activities

Olá, boa noite.

Eu tentei implementar o uso de parcel para envio de dados entre as Activities seguindo o exemplo do post da medium que vocês recomendaram (https://medium.com/@lucas_marciano/por-que-usar-o-parcelable-ao-inv%C3%A9s-do-serializable-5f7543a9c7f3), mas não consegui fazer compilar.

O compilador aponta que não consegue resolver o termo "from" na classe Aluno:

    private Aluno(Parcel p) {
        nome = from.readString();
        telefone = from.readString();
        email = from.readString();
    }

Segue abaixo o erro reportado:

C:\Users\olivd17\AndroidStudioProjects\agenda\Agenda\app\src\main\java\alura\com\br\model\Aluno.java:21: error: cannot find symbol nome = from.readString(); ^ symbol: variable from

O que esta havendo de errado?

Eu subi o projeto no Github se quiserem baixar para analisar: https://github.com/denis-oliveira/agenda/tree/parcel

Segue o código inteiro da classe Aluno:

package alura.com.br.model;

import android.os.Parcel;
import android.os.Parcelable;

import androidx.annotation.NonNull;

// Class to store student information
public class Aluno implements Parcelable {
    private final String nome;
    private final String telefone;
    private final String email;

    public Aluno(String nome, String telefone, String email) {
        this.nome = nome;
        this.telefone = telefone;
        this.email = email;
    }

    private Aluno(Parcel p) {
        nome = from.readString();
        telefone = from.readString();
        email = from.readString();
    }

    public static final Parcelable.Creator<Aluno>
            CREATOR = new Parcelable.Creator<Aluno>() {

        public Aluno createFromParcel(Parcel in) {
            return new Aluno(in);
        }

        public Aluno[] newArray(int size) {
            return new Aluno[size];
        }
    };

    public String getNome() {
        return nome;
    }

    public String getTelefone() {
        return telefone;
    }

    public String getEmail() {
        return email;
    }

    @NonNull
    @Override
    public String toString() {
        return this.nome;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(nome);
        dest.writeString(telefone);
        dest.writeString(email);
    }
}
2 respostas
solução!

Como você bem disse:

"O compilador aponta que não consegue resolver o termo "from" na classe Aluno:"

Ao olhar a classe Aluno vemos que não há a variável from (e ela também não é um atributo da classe).

    private Aluno(Parcel p) {
        nome = from.readString();
        telefone = from.readString();
        email = from.readString();
    }

Na realidade, o from deveria ser o parâmetro desse construtor, que está chamado de p. Logo para corrigir isso basta trocar o nome do parâmetro:

    private Aluno(Parcel from) {
        nome = from.readString();
        telefone = from.readString();
        email = from.readString();
    }

Perfeito, Felipe. Resolveu o problema. Muito obrigado.