मेरे पास दो वर्ग हैं जो ऑब्जेक्ट्स को बनाने के लिए मुझे ऑब्जेक्ट्स बनाने की ज़रूरत है, मैं वर्तमान में इसे करने के लिए पार्सेलबल को कार्यान्वित करने का प्रयास कर रहा हूं।कस्टम ऑब्जेक्ट्स के एरेलेलिस्ट को पार्सल करने योग्य
import android.os.Parcel;
import android.os.Parcelable;
public class Item implements Parcelable {
private String name;
private double price;
private int buyerCount = 0;
public Item(String name, double price) {
this.name = name;
this.price = price;
}
private Item(Parcel in) {
name = in.readString();
price = in.readDouble();
}
public static final Parcelable.Creator<Item> CREATOR = new Parcelable.Creator<Item>() {
public Item createFromParcel(Parcel in) {
return new Item(in);
}
public Item[] newArray(int size) {
return new Item[size];
}
};
@Override
public int describeContents() {
return 0;
}
public double getPrice() {
return price;
}
public int getBuyerCount() {
return buyerCount;
}
public void incrementBuyerCount() {
buyerCount += 1;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeDouble(price);
}
}
अब तक परीक्षण से मेरा आइटम ऑब्जेक्ट जानकारी को सही तरीके से स्थानांतरित करने लगता है जब मैं इसे बंडल करता हूं।
हालांकि मेरी दूसरी कक्षा डिनर में ऑब्जेक्ट्स का एक ऐरेलिस्ट है और मैं इस वर्ग में पार्सेलबल को सही ढंग से कार्यान्वित करने के बारे में अनिश्चित हूं, विशेष रूप से उन हिस्सों में जहां मैंने टिप्पणी की है। मुझे लगता है कि एक readParsableArray() विधि है लेकिन ArrayLists के लिए कुछ भी नहीं है।
import android.os.Parcel;
import android.os.Parcelable;
import java.util.ArrayList;
public class Diner implements Parcelable {
private String name;
private ArrayList<Item> itemList = new ArrayList<Item>();
public Diner(String name) {
this.name = name;
}
private Diner(Parcel in) {
name = in.readString();
// How to read in ArrayList itemList of item objects?
itemList = in.readParcelableArray();
}
public static final Parcelable.Creator<Diner> CREATOR = new Parcelable.Creator<Diner>() {
public Diner createFromParcel(Parcel in) {
return new Diner(in);
}
public Diner[] newArray(int size) {
return new Diner[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
// How to write ArrayList itemList of item objects?
dest.writeParcelableArray(itemList);
}
public void addItem(Item foodItem) {
itemList.add(foodItem);
foodItem.incrementBuyerCount();
}
public double getPrice() {
double total = 0;
for(Item item : itemList) {
total += item.getPrice()/item.getBuyerCount();
}
return total;
}
public String toString() {
return name;
}
}
हाथ से पार्सल करने योग्य कोड लिखना त्रुटि प्रवण है। यदि आप एंड्रॉइड स्टूडियो/इंटेलिजे का उपयोग कर रहे हैं तो आप इसे [पैरासेलबेलर] (https://github.com/dallasgutauckis/android-parcelable-intellij-plugin) का उपयोग कर सकते हैं ताकि यह आपके लिए किया जा सके। – Emmanuel
दुर्भाग्यवश यह एक स्कूल प्रोजेक्ट असाइनमेंट के लिए है, इसलिए मुझे विश्वास है कि बाहरी प्लगइन का उपयोग करने पर भरोसा किया जाता है। – user3371750
अपने प्रोफेसर से बात करें और एक अच्छे तरीके से उससे पूछें कि क्या वे चाहते हैं कि आप इस तरह से जाएं कि डेवलपर्स असली दुनिया पर ऐसा करते हैं या नहीं। – Emmanuel