当我将一个对象放入一个包中以便我可以将它转移到另一个Activity时,会发生更改IdEscritorio属性的值。 在我的LoginActivity IdEscritorio中,值为= 1,当我进入我的主要活动时,它的值为7。
logcat的
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];
}
};
}
答案 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());
}