2017-09-07 12 views
7

Parcelable उपयोग करने के लिए की 'ओवरराइड' में एक त्रुटि दे, मैं Kotlin 1.1.4 के इस रिलीज का पालन किया था: https://blog.jetbrains.com/kotlin/2017/08/kotlin-1-1-4-is-out/एंड्रॉयड Kotlin बनाने वर्ग को लागू Parcelable writeToParcel विधि

परियोजना में इस लाइन जोड़े

androidExtensions { 
    experimental = true 
} 

@Parcelize 
class User(val firstName: String, val lastName: String) : Parcelable 

writeToParcel() और createFromParcel() पद्धतियों स्वचालित रूप से बनाई गई हैं

:

फिर एक वर्ग को परिभाषित अधिभावी 'writeToParcel' अनुमति नहीं है:

override fun writeToParcel(parcel: Parcel, flags: Int) { 
... 
} 

लेकिन अभी भी संदेश

OVERRIDING_WRITE_TO_PARCEL_IS_NOT_ALLOWED साथ 'ओवरराइड' कीवर्ड में कोई त्रुटि है। इसके बजाय 'पार्सलर' साथी ऑब्जेक्ट का उपयोग करें

क्या आप मुझे सही रास्ता दिखा सकते हैं?

संपादित करें: क्या केवल डिफ़ॉल्ट कन्स्ट्रक्टर में परिभाषित गुण पार्सल में जोड़े जाएंगे, और अन्य नहीं है? मैं इस वर्ग में यह चेतावनी देखता हूं।

PROPERTY_WONT_BE_SERIALIZED: संपत्ति को 'पार्सल' में क्रमबद्ध नहीं किया जाएगा। '@Transient' टिप्पणी जोड़ें कि चेतावनी

उत्तर

3

दूर करने के लिए सुनिश्चित करें कि आप kotlin 1.1.4 संस्करण

writeToParcel/createFromParcel तरीकों ओवरराइड करने के लिए कोई ज़रूरत नहीं उपयोग कर रहे हैं। जब तक आप कोई विशिष्ट चीजें नहीं करते हैं। स्टूडियो आपको त्रुटि देता है लेकिन आप इस त्रुटि को अनदेखा कर सकते हैं; @ पार्सिलिज़ को समझने के लिए लिंट चेक अभी तक अपडेट नहीं किए गए हैं। इसी YouTrack यहां मुद्दा यह है:

https://youtrack.jetbrains.com/issue/KT-19300

उपयोग करने के लिए वर्ग

enter image description here

फिर बनाने

enter image description here

की तरह इसे पारित करने के लिए वापस

यह प्राप्त करने के लिए

enter image description here

+0

अगर मैं एक बच्चे के वर्ग जो parcelable वर्ग के वारिस को परिभाषित। क्या मुझे पार्सिलिज़ एनोटेशन जोड़ने की ज़रूरत है? – quangkid

+0

मैंने कभी यह कोशिश नहीं की लेकिन यदि आप बाल वर्ग को क्रमशः बेस क्लास के बजाय बाल वर्ग में पार्सिलिज़ का उपयोग करना चाहते हैं।और यदि बाल वर्ग को क्रमबद्ध नहीं किया जाता है तो पार्सिलिज़ करने की कोई आवश्यकता नहीं है। आप क्या हासिल करना चाहते हैं? –

4

आप केवल चेतावनी को अनदेखा कर सकते हैं क्योंकि यह केवल लिंट चेक है।
अब के लिए बस का उपयोग @SuppressLint("ParcelCreator")

पूर्व यह से छुटकारा पाने के:

@SuppressLint("ParcelCreator") 
@Parcelize 
class User(val firstName: String, val lastName: String) : Parcelable 
संबंधित मुद्दे