2016-07-20 40 views
12

में अनबाउंड सेवा बनाना मैं कोटलिन में एक साधारण अनबाउंड सेवा बनाने की कोशिश कर रहा हूं, लेकिन मैं नहीं कर सकता। जब मैं जावा में onBind() विधि को ओवरराइड करता हूं तो मैं null वापस कर सकता हूं, लेकिन कोटलिन में यह कहता है कि मुझे केवल IBinder और IBinder? वापस करने की अनुमति नहीं है, इसका मतलब है कि यह null नहीं हो सकता है। जावा में MyService क्लास को फिर से लिखने के अलावा किसी भी विचार को कैसे ठीक किया जाए?कोटलिन

[हल] धन्यवाद, दोस्तों! मैं वास्तव में IBinder से IBinder? बदल सकता हूं। यह काम करता हैं!!

+4

क्या आप कोटलिन का संस्करण उपयोग कर रहे हैं? 1.0.3 का उपयोग करते हुए, जब मैंने एक सेवा को परिवर्तित किया, तो विधि हस्ताक्षर 'दिमाग (इरादा: इरादा): आईबींडर पर मरो ओवरराइड था और एंड्रॉइड स्टूडियो में ओवरराइड उत्पन्न करने से मुझे' ओवरराइड मजेदार '(इरादा: इरादा?): आईबिंदर' लेकिन मैं इसे बिना किसी मुद्दे के 'IBinder? 'में बदलने में सक्षम था – Enrico

उत्तर

11

जैसा कि एनरिको ने उल्लेख किया है कि आप IBinder से IBinder? का एक प्रकार बदल सकते हैं और यह अभी भी इंटरफ़ेस से मेल खाएगा।

सामान्य रूप से, Android विधियों को ओवरराइड करने के लिए एंड्रॉइड स्टूडियो का उपयोग करते समय सावधान रहें। असली समस्या तब आती है जब यह गैर-शून्य प्रकार उत्पन्न करता है जब सिस्टम वास्तव में एक शून्य संदर्भ वापस कर सकता है। यह रनटाइम कोटलिन अपवादों का कारण बनता है जिन्हें आप वास्तव में उम्मीद नहीं करते हैं।

अगर मुझे सही याद है तो Fragment वर्ग और View निर्माण से संबंधित विधियों को अधिभारित करते समय मुझे बहुत सी समस्याएं थीं।