2014-10-21 3 views
1

Когда я помещаю объект в пакет, чтобы перенести его в другое действие, происходит изменение значения атрибута IdEscritorio. В моей LoginActivity IdEscritorio величина = 1, когда я получаю в моей основной деятельностью является его со значением 7.Значения меняются при вставке в Bundle

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())); 
} 

класса Новичок

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

Вы можете сделать это нравится: 'если (сверток! = NULL) { _usuarioAutenticado = bundle.getParcelable ("usuarioAutenticado"); Log.d (TAG, "IdEscritorio:" + String.valueOf (_usuarioAutenticado.getIdEscritorio())); } 'и снова проверить результат? – helleye

+0

Тот же результат в журнале, значение остается неизменным. –

ответ

0

Проблема с вашим Parcelable класса. В вашем классе writeToParcel вы пишете только Ид и Ном на парцеллу.

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

Однако, вы читаете все 5 полей при создании объекта в Usuario(Parcel parcel). Для этого, чтобы работать правильно, изменить метод writeToParcel к:

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

Спасибо AesSedai101! –

+0

Добро пожаловать :) – AesSedai101

Смежные вопросы