2011-11-18 11 views
14

मैं एंड्रॉइड में दो गतिविधियों के बीच ऑब्जेक्ट को पास करना चाहता हूं जो मुझे पार्सल योग्य वर्गों तक ले जाता है। मैं अपनी वर्तमान कक्षा को बदलने की कोशिश नहीं कर रहा हूं लेकिन पार्ससेल योग्य समझ में नहीं आता। निर्माता विधि।एंड्रॉइड: कक्षा को पार्सल करने योग्य

यह है कि मैं क्या पहले से अब तक

public class Account implements Parcelable{ 

/** 
* Declare private variables 
*/ 

private String fName; 
private String lName; 
private String screenName; 
private String email; 
private String level; 
private int userId; 
//private Context myContext; 

/** 
* Account constructor 
*/ 

public Account(String fName, String lName, String sName, String email, String level, String x) throws Exception{  


    /**Parse userId into int */ 
    this.userId = Integer.parseInt(x); 

    /**Select from DB user details */ 


    /**Initialize variables with results */ 
    this.setfName(fName); 
    this.setlName(lName); 
    this.setScreenName(sName); 
    this.setEmail(email); 
    this.setLevel(level); 



} 

@Override 
public int describeContents() { 
    // TODO Auto-generated method stub 
    return 0; 
} 

@Override 
public void writeToParcel(Parcel out, int flags) { 
    // TODO Auto-generated method stub 
    out.writeString(fName); 
    out.writeString(lName); 
    out.writeString(screenName); 
    out.writeString(email); 
    out.writeString(level); 
    out.writeInt(userId); 

} 

// this is used to regenerate your object. All Parcelables must have a CREATOR that implements these two methods 
public static final Parcelable.Creator<Account> CREATOR = new Parcelable.Creator<Account>() { 
    public Account createFromParcel(Parcel in) { 
     return new Account(in); 
    } 

    public Account[] newArray(int size) { 
     return new Account[size]; 
    } 
}; 



/** 
* Getters and setters for all variables from Account class 
*/ 

public int getUserId(){ 
    return userId; 
} 

public String getScreenName() { 
    return screenName; 
} 

public void setScreenName(String screenName) { 
    this.screenName = screenName; 
} 

public String getfName() { 
    return fName; 
} 

public void setfName(String fName) { 
    this.fName = fName; 
} 

public String getEmail() { 
    return email; 
} 

public void setEmail(String email) { 
    this.email = email; 
} 

public String getLevel() { 
    return level; 
} 

public void setLevel(String level) { 
    this.level = level; 
} 

public String getlName() { 
    return lName; 
} 

public void setlName(String lName) { 
    this.lName = lName; 
} 



} 

धन्यवाद है।

उत्तर

11
public static final Parcelable.Creator CREATOR = 
    new Parcelable.Creator() { 
     public ObjectB createFromParcel(Parcel in) { 
      return new ObjectB(in); 
     } 

     public ObjectB[] newArray(int size) { 
      return new ObjectB[size]; 
     } 
    }; 

इस क्षेत्र को एंड्रॉइड के लिए अलग-अलग ऑब्जेक्ट्स, व्यक्तिगत रूप से या सरणी बनाने में सक्षम होने के लिए आवश्यक है। इसका अर्थ यह भी है कि आप ऑब्जेक्ट बनाने के लिए डिफ़ॉल्ट कन्स्ट्रक्टर का उपयोग कर सकते हैं और आवश्यकतानुसार इसे हाइड्रेट करने के लिए किसी अन्य विधि का उपयोग कर सकते हैं। इस Android – Parcelable

Online tool for creating Parcelable class

और http://www.appance.com/tag/parcelable/

+2

"एंड्रॉइड के लिए नई वस्तुएं बनाने में सक्षम होने के लिए यह फ़ील्ड आवश्यक है" - लेकिन * कब *? –

18

पर

देखो यहां Android parcelable कार्यान्वयन के लिए एक महान उपकरण है।

Parcelabler by Dallas Gutauckis

+1

यह उपकरण वास्तव में सहायक है। मुझे इस तरह का टूल मिल रहा था।इसे हमारे साथ साझा करने के लिए धन्यवाद। –

+0

@AndreyPetrov अब यह है। – Sufian

+1

पृष्ठ फिर से वैध नहीं है –

0

On GitHub आप कुछ कोड मैं Parcelables की हैंडलिंग को सरल बनाने के लिए कुछ समय पहले लिखा था पा सकते हैं का उपयोग कर parcelable वस्तुओं बनाने (जैसे करने के लिए लिखने के लिए एक और उपकरण है और पार्सल से पढ़ना, CREATORs के लिए प्रारंभकर्ता कोड को सरल बनाना)।

एक पार्सल करने के लिए लेखन:

parcelValues(dest, name, maxSpeed, weight, wheels, color, isDriving); 

जहां रंग एक enum है और isDriving उदाहरण के लिए, एक बूलियन है।

एक पार्सल से पढ़ रहा है:

public static final Parcelable.Creator<Car> CREATOR = 
    Parceldroid.getCreatorForClass(Car.class); 

... या enums के लिए:

// [...] 
color = (CarColor)unparcelValue(CarColor.class.getClassLoader()); 
isDriving = (Boolean)unparcelValue(); 

वर्गों के लिए एक निर्माता बनाना

public static final Parcelable.Creator<CarColor> CREATOR = 
    Parceldroid.getCreatorForEnum(CarColor.class); 

बस पर एक नज़र " ParceldroidExample "मैंने परियोजना में जोड़ा।

0

गतिविधियों के बीच डेटा स्थानांतरित करना serializable के साथ ही पार्सेलबल का उपयोग करके किया जा सकता है। लेकिन पार्सलबल को सबसे अच्छा माना जाता है। (why)

एंड्रॉइड में एक प्लगइन है जो आपको कक्षा में फ़ील्ड के लिए पार्ससेल कोड डालने देता है। आप इसे मेनू फ़ाइल> सेटिंग्स> प्लगइन्स> एंड्रॉइड पार्सलबल कोड जेनरेटर से ढूंढ सकते हैं।

और प्लगइन का उपयोग करने के लिए गेटर और सेटटर की तरह शॉर्टकट alt + डालने का उपयोग करें।

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