插入Bundle时更改值

时间:2014-10-21 13:09:11

标签: android android-activity parcelable

当我将一个对象放入一个包中以便我可以将它转移到另一个Activity时,会发生更改IdEscritorio属性的值。 在我的LoginActivity IdEscritorio中,值为= 1,当我进入我的主要活动时,它的值为7。

logcat的 enter image description here

LoginActivity方法

private void IniciarMainActivity(Usuario usuarioAutenticado)
{
    //Iniciar Activity Main
    Intent i = new Intent(LoginActivity.this, MainActivity.class);
    Bundle b = new Bundle();
    b.putParcelable("usuarioAutenticado", usuarioAutenticado);

    Log.d(TAG, "IdEscritorio: " +  String.valueOf(usuarioAutenticado.getIdEscritorio()));

    i.putExtras(b);
    startActivity(i);
}

MainActivity onCreate()

@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //Widgets
    InicializeComponents();

    //Listeners Events
    Listeners();

    //Recuperar os valores de usuario autenticado enviado da activity Login
    _usuarioAutenticado = new Usuario();
    Bundle bundle = getIntent().getExtras();        
    if(bundle != null)
        _usuarioAutenticado = bundle.getParcelable("usuarioAutenticado");

    Log.d(TAG, "IdEscritorio: " +  String.valueOf(_usuarioAutenticado.getIdEscritorio()));
}

Class Usuario

public class Usuario implements Parcelable {

    private int Id;
    private int IdEscritorio;
    private String Nome;
    private String Login;
    private String Senha;   

    /**
     * Construtores
     */
    public Usuario()
    {
        super();
    }

    public Usuario(Parcel parcel)
    {
        this();
        this.Id = parcel.readInt();
        this.IdEscritorio = parcel.readInt();
        this.Nome = parcel.readString();
        this.Login = parcel.readString();
        this.Senha = parcel.readString();
    }   

    /**
     * Propriedades
     */
    public void setId(int id) {
        Id = id;
    }

    public int getId() {
        return Id;
    }

    public int getIdEscritorio() {
        return IdEscritorio;
    }

    public void setIdEscritorio(int idEscritorio) {
        IdEscritorio = idEscritorio;
    }

    public String getNome() {
        return Nome;
    }

    public void setNome(String nome) {
        Nome = nome;
    }

    public String getLogin() {
        return Login;
    }

    public void setLogin(String login) {
        Login = login;
    }

    public String getSenha() {
        return Senha;
    }

    public void setSenha(String senha) {
        Senha = senha;
    }

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

    @Override
    public void writeToParcel(Parcel out, int flags) 
    {
        out.writeInt(getId());
        out.writeString(getNome());
    }


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

        @Override   
        public Usuario createFromParcel(Parcel in){ 
                return new Usuario(in);
            }
        @Override
        public Usuario[] newArray(int size) {
            return new Usuario[size];
            }
    };
}

1 个答案:

答案 0 :(得分:0)

问题在于您的Parcelable课程。在writeToParcel课程中,您只将Id和Nome写入包裹。

@Override
public void writeToParcel(Parcel out, int flags) 
{
    out.writeInt(getId());
    out.writeString(getNome());
}

但是,在Usuario(Parcel parcel)中创建对象时,您正在阅读所有5个字段。 为了使其正常工作,请将writeToParcel方法更改为:

public void writeToParcel(Parcel out, int flags)
{
    out.writeInt(getId());
    out.writeInt(getIdEscritorio());
    out.writeString(getNome());
    out.writeString(getLogin());
    out.writeString(getSenha());
}