2017-04-20 2 views
1

J'ai un objet personnalisé nommé Consts. Il inclut des informations sur l'utilisateur et l'objet de bibliothèque externe. Je crée Consts objet dans LoginActivity après l'authentification de l'utilisateur et je veux passer cet objet à mon MainActivity.Comment passer un objet externe entre des intentions à l'aide de la parcelle

Comment puis-je transmettre un objet personnalisé contenant un objet externe entre des intentions?

Une partie de Consts objet:

public class Consts implements Parcelable { 

    //Created by me. I can pass this object to MainActivity. 
    UserInformationClass UserInfo = new UserInformationClass(); 

    //This is external object. 
    SweetAlertDialog AlertDialog; 
    String AppVersion = "v2.0"; 
    String OSVersion = ""; 


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

    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
     dest.writeParcelable(this.UserInfo, flags); 
     dest.writeString(this.AppVersion); 
     dest.writeString(this.OSVersion); 
    } 

    public Consts(SweetAlertDialog alert) { 
      this.AlertDialog = alert; 
    } 

    protected Consts(Parcel in) { 
     this.UserInfo = in.readParcelable(UserInformationClass.class.getClassLoader()); 
     this.AppVersion = in.readString(); 
     this.OSVersion = in.readString(); 
    } 

    public static final Parcelable.Creator<Consts> CREATOR = new Parcelable.Creator<Consts>() { 
     @Override 
     public Consts createFromParcel(Parcel source) { 
      return new Consts(source); 
     } 

     @Override 
     public Consts[] newArray(int size) { 
      return new Consts[size]; 
     } 
    }; 
} 

LoginActivity:

public class LoginActivity { 


    Consts consts = new Consts(new SweetAlertDialog()); 
         . 
         . 

    private void LoginCompleted(JSONObject json) { 
      consts.getUserInfo().setName("Cristiano"); 
      consts.getUserInfo().setSurname("Ronaldo"); 
      consts.getUserInfo().setTokenID("7"); 
      consts.getUserInfo().setTokenTimeOut("100"); 

      Intent i = new Intent(getApplicationContext(), MainActivity.class); 
      i.putExtra("ConstsObject", consts); 
      startActivity(i); 
      finish(); 
    } 
} 

MainActivity:

public class MainActivity { 

Consts consts; 

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

    Bundle data = getIntent().getExtras(); 
    consts = (Consts) data.getParcelable("ConstsObject"); 
    //I can get consts object but consts.AlertDialog is null :(
} 
+0

vérifier ma réponse: http://stackoverflow.com/a/43424961/6756514 –

+1

@DivyeshPatel, votre objet 'Item' contient uniquement la valeur' String'. Je veux passer l'objet _External_. – NoName

+0

pour quoi avez-vous besoin de 'Parcel'? votre classe 'Consts' est' Parcelable', donc passez-la simplement via 'Intent'. – pskink

Répondre

1

Non, vous ne pouvez pas passer l'objet externe @ user1643723 vous a dit.

Vous pouvez utiliser Singleton:

//-- this must be your Consts file 
public class Singleton { 
    private static final Singleton instance = new Singleton(); 
    SweetAlertDialog AlertDialog; 
    // Private constructor prevents instantiation from other classes 
    private Singleton() { 

    } 

    public static Singleton getInstance() { 
     return instance; 
    } 

    public SweetAlertDialog getAlertDialog() { 
     if (AlertDialog == null) 
      AlertDialog = new SweetAlertDialog(); 
     return AlertDialog; 
    } 

    public void setAlertDialog(SweetAlertDialog alertDialog) { 
     AlertDialog = alertDialog; 
    } 

} 

Vous pouvez accéder partout:

Consts consts = Consts.getInstance(); 

Wikipedia:Singleton pattern

+1

Merci pour la réponse .. – NoName