Dans mon projet Android, je définis une classe comme «paramètres» qui inclut des valeurs de réglage globales et je l'utiliserai dans de nombreuses activités différentes. Donc, je veux transmettre cette classe avec l'utilisation de paquets et j'ai essayé aussi de pièces mais cela ne fonctionne pas? Pouvez-vous dire ce que la meilleure pratique est?
Ceci est ma classe: P>
... Setting sets = new Setting(); sets.set1 = "test"; sets.set2 = true; sets.set3 = 1; ... Bundle b = new Bundle(); b.putParcelable("pass_settings", (Parcelable) sets );
4 Réponses :
Vous pouvez utiliser bibliothèque gson pour convertir l'objet de réglage complet à JSON String en le transmettant à l'intention À partir de l'activité actuelle, puis remettez-le à la définition de l'objet à la réception de l'activité.
Activité actuelle: P>
1. Gson gson = new Gson(); 2. Setting sets = gson.fromJson(json, Setting.class);
Vous devez implémenter l'interface par conditionnement: puis vous pouvez le mettre dans un paquet: p>
C'est ce que j'ai vraiment cherché. Merci.
Vous devez mettre en œuvre Paracable
public class Settings implements Paracable{ String set1; boolean set2; int set3; // Parcelling part public static final Creator<Setting> CREATOR = new Creator<Setting>() { @Override public Setting createFromParcel(Parcel in) { return new Setting(in); } @Override public Setting[] newArray(int size) { return new Setting[size]; } }; public Settings (Parcel in){ this.set1= in.readLong(); this.set2 = in.readString(); this.set3 = in.readString(); } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(this.set1); dest.writeBoolean(this.set2); dest.writeInt(this.set3); } }
public class Settings implements Parcelable { private String mSet1; private boolean mSet2; private int mSet3; public Settings(){} protected Settings(Parcel in) { mSet1 = in.readString(); mSet2 = in.readByte() != 0; mSet3 = in.readInt(); } public String getSet1() { return mSet1; } public void setSet1(final String set1) { mSet1 = set1; } public boolean isSet2() { return mSet2; } public void setSet2(final boolean set2) { mSet2 = set2; } public int getSet3() { return mSet3; } public void setSet3(final int set3) { mSet3 = set3; } public static final Creator<Settings> CREATOR = new Creator<Settings>() { @Override public Settings createFromParcel(Parcel in) { return new Settings(in); } @Override public Settings[] newArray(int size) { return new Settings[size]; } }; @Override public int describeContents() { return 0; } @Override public void writeToParcel(final Parcel dest, final int flags) { dest.writeString(mSet1); dest.writeByte((byte) (mSet2 ? 1 : 0)); dest.writeInt(mSet3); } private void test(){ Settings toSave = new Settings(); Bundle bundle = new Bundle(); bundle.putParcelable("bundle_key", toSave); Settings settings = bundle.getParcelable("bundle_key`enter code here`"); } }
"Donc, je veux transmettre cette classe avec l'utilisation de paquets" - si cet objet représente les paramètres globaux, vous ne devriez peut-être pas le transmettre, mais j'ai plutôt une instance singleton que vous utilisez. "J'ai essayé aussi de pièces mais cela ne fonctionne pas?" - Vous n'avez pas implémenté
contrattable code> sur votre classement code> code>.