2015-03-06 5 views
8

मेरे पास दो वर्ग हैं जो ऑब्जेक्ट्स को बनाने के लिए मुझे ऑब्जेक्ट्स बनाने की ज़रूरत है, मैं वर्तमान में इसे करने के लिए पार्सेलबल को कार्यान्वित करने का प्रयास कर रहा हूं।कस्टम ऑब्जेक्ट्स के एरेलेलिस्ट को पार्सल करने योग्य

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

} 
+1

हाथ से पार्सल करने योग्य कोड लिखना त्रुटि प्रवण है। यदि आप एंड्रॉइड स्टूडियो/इंटेलिजे का उपयोग कर रहे हैं तो आप इसे [पैरासेलबेलर] (https://github.com/dallasgutauckis/android-parcelable-intellij-plugin) का उपयोग कर सकते हैं ताकि यह आपके लिए किया जा सके। – Emmanuel

+0

दुर्भाग्यवश यह एक स्कूल प्रोजेक्ट असाइनमेंट के लिए है, इसलिए मुझे विश्वास है कि बाहरी प्लगइन का उपयोग करने पर भरोसा किया जाता है। – user3371750

+2

अपने प्रोफेसर से बात करें और एक अच्छे तरीके से उससे पूछें कि क्या वे चाहते हैं कि आप इस तरह से जाएं कि डेवलपर्स असली दुनिया पर ऐसा करते हैं या नहीं। – Emmanuel

उत्तर

17

उपयोग writeTypedList और readTypedList

parcel.writeTypedList(yourList); 

और

parcel.readTypedList(yourList, YourParcelable.CREATOR); 

सूचना कैसे आप सूची वापस पढ़ने के लिए एक तर्क के रूप में निर्माता गुजरती हैं।

+0

आपकी प्रतिक्रिया के लिए धन्यवाद, हालांकि मुझे निम्न पंक्ति का उपयोग करने का प्रयास करते समय एक असंगत प्रकार त्रुटि संदेश मिलता है - itemList = in.readTypedList (itemList, Item.CREATOR); – user3371750

+1

@ user3371750 'readTypedList' का शून्य प्रकार का शून्य है, यह आपके द्वारा जो भी सूची में गुजरता है उसे भर देगा। –

संबंधित मुद्दे