2011-05-24 10 views
6

मैं अपने डेटा क्लास को पार्सेलबल को लागू करने के लिए चाहता हूं, इसलिए इसे क्रियाकलापों के बीच साझा किया जा सकता है, हालांकि इसे संदर्भ के संदर्भ की भी आवश्यकता है ताकि फ़ील्ड को SQLiteDatabase में सहेजा जा सके।संदर्भित पोर्टेबल योग्य वर्ग को कार्यान्वित करने के लिए संदर्भ

हालांकि यह पार्ससेल के बाद से एक समस्या है। निर्माता विधि बनाने FromParcel केवल एक पैरामीटर पार्सल है।

public abstract class Record implements Parcelable { 

protected Context context; 
protected String value; 

public Record(Context context) { 
    this.context = context; 
} 

public Record(Parcel parcel) { 
    this.value = parcel.readString(); 
} 

public void save() { 
    //save to SQLiteDatabase which requires Context 
} 

@Override 
public int describeContents() { 
    return 0; 
} 

@Override 
public void writeToParcel(Parcel parcel, int flag) { 
    parcel.writeString(value); 
} 

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

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

पार्सेलबल लागू करने वाली कक्षा भी संदर्भ का संदर्भ कैसे दे सकती है ताकि यह SQLiteDatabase को सहेज सके?

+0

शायद आप MyApp में गतिशील डेटा को सहेज/पढ़ सकते हैं (MyApp) getAplicationContext() का उपयोग कर एप्लिकेशन को बढ़ाता है। – JAL

उत्तर

5

पार्ससेल इंटरफ़ेस जावा इंटरफ़ेस Serializable जैसा है। ऑब्जेक्ट्स जो इस इंटरफेस को कार्यान्वित करते हैं, क्रमिक होना चाहिए। इसका मतलब है कि ऑब्जेक्ट को उस प्रस्तुति में परिवर्तित करना संभव होना चाहिए जिसे फ़ाइल में सहेजा जा सकता है उदा।

स्ट्रिंग, इंट, फ्लोट या डबल इत्यादि के लिए यह आसानी से संभव है, क्योंकि उनमें सभी का स्ट्रिंग प्रतिनिधित्व होता है। संदर्भ वर्ग स्पष्ट रूप से धारावाहिक नहीं है और पार्सलबल नहीं है, क्योंकि यह उदाहरण के लिए एक गतिविधि हो सकता है।

यदि आप किसी डेटाबेस में अपनी गतिविधि की स्थिति को सहेजना चाहते हैं, तो आपको ऐसा करने का दूसरा तरीका मिलना चाहिए।

0

आपकी रिकॉर्ड कक्षा को शायद SQL डेटाबेस तक पहुंच की आवश्यकता नहीं है। इसका कारण यह है कि अब आपके पास वास्तव में समस्या है: प्रत्येक रिकॉर्ड में संदर्भ को वापस इंजेक्ट करना बहुत मुश्किल है।

शायद एक बेहतर समाधान एक स्थिर RecordSQLService लागू करना होगा, जिसमें विधि save(Record r) है। जब आपका ऐप लॉन्च होता है तो आपका ऐप RecordSQLService शुरू कर सकता है, इसलिए जब तक आपका ऐप करता है तब तक यह जीवित रहेगा, और रिकॉर्ड क्लास से बचने की ज़िम्मेदारी लेती है, जो इसे बनाता है ताकि आपको संदर्भ की आवश्यकता न हो और इसे पार्सल कर सकें ।

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

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