2017-04-20 15 views
1

Constsというカスタムオブジェクトがあります。それはユーザーと外部ライブラリオブジェクトに関するいくつかの情報を含んでいます。私はユーザ認証の後にLoginActivityConstsオブジェクトを作成しています。このオブジェクトを私のMainActivityに渡したいと思います。パーセルを使用してインテント間で外部オブジェクトを渡す方法

インテント間で外部オブジェクトを含むカスタムオブジェクトを渡すにはどうすればよいですか?

Constsオブジェクトの一部:

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 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

チェック私の答え:http://stackoverflow.com/a/43424961/6756514 –

+1

@DivyeshPatel、 'Item'オブジェクトには' String'値だけが含まれています。 _External_オブジェクトを渡したい。 – NoName

+0

'Parcel'は何のために必要ですか?あなたの 'Consts'クラスは' Parcelable'なので 'Intent'エクストラ経由で渡すだけです – pskink

答えて

1

いいえ、あなたは@ user1643723などの外部オブジェクトを渡すことができないことを言った:MainActivityは

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

あなたは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; 
    } 

} 

あなたはどこにでもアクセスすることができます。

Consts consts = Consts.getInstance(); 

Wikipedia:Singleton pattern

+1

答えをありがとう.. – NoName

関連する問題