HeyGuadah Posté(e) 20 novembre 2015 Share Posté(e) 20 novembre 2015 (modifié) Bonjour amis développeurs ! J'ouvre un petit post aujourd'hui car j'aurais besoin d'un petit conseil. J'ai créé une classe user dans une application. Cette classe sera remplit au fur et à mesure des activité qui la compose pour finalement être affiché dans la dernière activité. Pour la création de la classe, tous c'est très bien passé mais j'ai un petit soucis dans le intent.putExtra de mes activités... Je vous montre mes petits bouts de codes. La classe User package com.example.shiin.loginregisteralpha; import android.os.Parcel; import android.os.Parcelable; public class User { private String mName; private String mFirstName; private String mDate; private String mSexe; private String mMdp; private String mMail; private String mSexeFind; private String mCity; private String mCountry; private String mCountryId; public User(String Name, String FirstName, String Date, String Sexe, String Mdp, String Mail, String SexeFind, String City, String Country, String CountryId) { super(); this.mName = Name; this.mFirstName = FirstName; this.mDate = Date; this.mSexe = Sexe; this.mMdp = Mdp; this.mMail = Mail; this.mSexeFind = SexeFind; this.mCity = City; this.mCountry = Country; this.mCountryId = CountryId; } public User(Parcel in) { this.mName = in.readString(); this.mFirstName = in.readString(); this.mDate = in.readString(); this.mSexe = in.readString(); this.mMdp = in.readString(); this.mMail = in.readString(); this.mSexeFind = in.readString(); this.mCity = in.readString(); this.mCountry = in.readString(); this.mCountryId = in.readString(); } public int describeContents() { return 0; } public void writeToParcel(Parcel dest, int flags) { dest.writeString(mName); dest.writeString(mFirstName); dest.writeString(mDate); dest.writeString(mSexe); dest.writeString(mMdp); dest.writeString(mMail); dest.writeString(mSexeFind); dest.writeString(mCity); dest.writeString(mCountry); dest.writeString(mCountryId); } public static final Parcelable.Creator<User> CREATOR = new Parcelable.Creator<User>() { @[member="override"] public User createFromParcel(Parcel source) { return new User(source); } @[member="override"] public User[] newArray(int size) { return new User[size]; } }; public String getmName() { return mName; } public String getmFirstName() { return mFirstName; } public String gemDate() { return mDate; } public String getmSexe() { return mSexe; } public String getmMdp() { return mMdp; } public String getmMail() { return mMail; } public String getmSexeFind() { return mSexeFind; } public String getmCity() { return mCity; } public String getmCountry() { return mCountry; } public String getmCountryId() { return mCountryId; } public static Parcelable.Creator<User> getCreator() { return CREATOR; } } Le fragment d'envoie de donnée de mon activité d'envoi User user = new User(name, firstname, null, null, null, null, null, null, null, null); Intent intent = new Intent(getApplicationContext(), RegisterBirth.class); intent.putExtra("user", user); startActivity(intent); Le code d'erreur Error:(38, 23) error: no suitable method found for putExtra(String,User) method Intent.putExtra(String,boolean) is not applicable (argument mismatch; User cannot be converted to boolean) method Intent.putExtra(String,byte) is not applicable (argument mismatch; User cannot be converted to byte) method Intent.putExtra(String,char) is not applicable (argument mismatch; User cannot be converted to char) method Intent.putExtra(String,short) is not applicable (argument mismatch; User cannot be converted to short) method Intent.putExtra(String,int) is not applicable (argument mismatch; User cannot be converted to int) method Intent.putExtra(String,long) is not applicable (argument mismatch; User cannot be converted to long) method Intent.putExtra(String,float) is not applicable (argument mismatch; User cannot be converted to float) method Intent.putExtra(String,double) is not applicable (argument mismatch; User cannot be converted to double) method Intent.putExtra(String,String) is not applicable (argument mismatch; User cannot be converted to String) method Intent.putExtra(String,CharSequence) is not applicable (argument mismatch; User cannot be converted to CharSequence) method Intent.putExtra(String,Parcelable) is not applicable (argument mismatch; User cannot be converted to Parcelable) method Intent.putExtra(String,Parcelable[]) is not applicable (argument mismatch; User cannot be converted to Parcelable[]) method Intent.putExtra(String,Serializable) is not applicable (argument mismatch; User cannot be converted to Serializable) method Intent.putExtra(String,boolean[]) is not applicable (argument mismatch; User cannot be converted to boolean[]) method Intent.putExtra(String,byte[]) is not applicable (argument mismatch; User cannot be converted to byte[]) method Intent.putExtra(String,short[]) is not applicable (argument mismatch; User cannot be converted to short[]) method Intent.putExtra(String,char[]) is not applicable (argument mismatch; User cannot be converted to char[]) method Intent.putExtra(String,int[]) is not applicable (argument mismatch; User cannot be converted to int[]) method Intent.putExtra(String,long[]) is not applicable (argument mismatch; User cannot be converted to long[]) method Intent.putExtra(String,float[]) is not applicable (argument mismatch; User cannot be converted to float[]) method Intent.putExtra(String,double[]) is not applicable (argument mismatch; User cannot be converted to double[]) method Intent.putExtra(String,String[]) is not applicable (argument mismatch; User cannot be converted to String[]) method Intent.putExtra(String,CharSequence[]) is not applicable (argument mismatch; User cannot be converted to CharSequence[]) method Intent.putExtra(String,Bundle) is not applicable (argument mismatch; User cannot be converted to Bundle) Ça risque peut-être de vous sembler élémentaires mais je tourne en rond depuis plusieurs heures, je pense passer à coté de quelque chose.... Merci d'avance pour vos réponses ! Modifié 22 novembre 2015 par HeyGuadah Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
gob0 Posté(e) 20 novembre 2015 Share Posté(e) 20 novembre 2015 Salut, l'erreur provient du fait que la méthode putExtra ne sait pas recevoir ton objet User. Il faut que tu implémentes ta classe User comme "Serializable", et là bingo, tu peux la passer via putExtra. -> public class User implements Serializable Après, tu ajoutes les éléments manquants (l'import pour Serializable et l'identifier -choisis "generated") Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
HeyGuadah Posté(e) 20 novembre 2015 Auteur Share Posté(e) 20 novembre 2015 Merci pour ta réponse, effectivement il manquait l’implémentation de l'interface ! J'aurais juste une dernière question lié à mon cas, est-ce que je m'y prends bien pour récupérer mes données de ma classe User ? Malheureusement l'application crash lorsque j'arrive sur la layout de récupération des informations ! Mon code de récupération User user = getIntent().getExtras().getParcelable("user"); //Ligne concernée par l'erreur en question TextView displayUser = (TextView) findViewById(R.id.textView2); displayUser.setText("Name : " + user.getmName() + "\n" + "Firstname : " + user.getmFirstName()); Mon erreur Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Parcelable android.os.Bundle.getParcelable(java.lang.String)' on a null object reference Merci par avance ! Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
gob0 Posté(e) 20 novembre 2015 Share Posté(e) 20 novembre 2015 getParcelable est dédié à récupérer des objets Parcelable. Ce qui n'est pas ton cas puisque ta classe User est Serializable. La classe Intent définit la méthode getSerializableExtra En retour, il me semble que tu as un objet Serializable, pas ton objet User. (à vérifier au debugger). Si c'est le cas, lis cette doc: http://developer.android.com/reference/java/io/Serializable.html Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
HeyGuadah Posté(e) 20 novembre 2015 Auteur Share Posté(e) 20 novembre 2015 Merci de ta réponse, effectivement j'ai eu en retour un objet Serializable. De plus, c'était une erreur de ma part de ne pas avoir tester mon objet au préalable. J'ai donc modifié mon code et je me suis rendu compte que mon objet était bien null. public class F extends AppCompatActivity { @[member=override] protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_F); TextView displayUser = (TextView) findViewById(R.id.textView2); Bundle bundle = getIntent().getExtras(); if (bundle != null) { User user = bundle.getParcelable("user"); displayUser.setText("Name : " + user.getmName() + "\n" + "Firstname : " + user.getmFirstName()); } else { displayUser.setText("Name : Null" + "\n" + "Firstname : Null"); } } } J'ai donc un problème lors de mon envoi de données. Pour mieux expliquer mon projet, j'ai plusieurs activités qui récupère chacune une ou plusieurs informations qui seront affiché dans la dernière activité. Voici mon ligne de code dans l'activité A, juste avant l'activité B. Les informations enregistré dans A, B, ..., devront être affiché dans mon activité F. public void onClick(View v) { final String name = til_name.getEditText().getText().toString().trim(); final String firstname = til_firstname.getEditText().getText().toString().trim(); User user = new User(name, firstname); Intent intent = new Intent(getApplicationContext(), B.class); intent.putExtra("user", user); startActivity(intent); J'ai lut partout qu'il fallait utiliser les intents pour enregistrer mes données dans ma classe User mais j'ai l'impression que ce n'est pas l'utilisation optimale quand on a plusieurs activité intermédiaire entre l'activité d'enregistrement et l'activité d'affichage. Avez-vous des idées pour m'aider ? Je vous remercie par avance. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
gob0 Posté(e) 20 novembre 2015 Share Posté(e) 20 novembre 2015 Effectivement, balader ses objets d'intent en en intent, c'est pas le plus efficace (en terme de coding au moins) Perso, je ferais une classe Singleton pour stocker les informations au fur et à mesure des intents. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
HeyGuadah Posté(e) 22 novembre 2015 Auteur Share Posté(e) 22 novembre 2015 Merci beaucoup pour tes réponses, le problème est résolu ! Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.