मैंने हाल ही में android.os.Bundle
के साथ कुछ मुद्दों में भाग लिया है कि मुझे कक्षा को विस्तारित करके और इसे अधिक आसानी से टाइप करके ठीक करने की उम्मीद है। विशिष्ट समस्या यह है कि मैं में भाग की तरह त्रुटियों था:एंड्रॉइड.ओएस.बंडल अंतिम श्रेणी क्यों है?
W/Bundle (6782): Key access_token expected byte[] but value was a java.lang.String. The default value <null> was returned.
W/Bundle (6782): Attempt to cast generated internal exception:
W/Bundle (6782): java.lang.ClassCastException: java.lang.String
W/Bundle (6782): at android.os.Bundle.getByteArray(Bundle.java:1305)
बेशक
, String
से byte[]
करने के लिए रूपांतरण तुच्छ है, इसलिए मेरे विचार बस है Bundle
यह एक byte[]
की तलाश में है, तो स्वचालित रूप से इस रूपांतरण करने के लिए था, लेकिन पाता है इसके बजाय String
। यह मूर्खतापूर्ण है कि यह पहले से ही ऐसा नहीं करता है (और यह भी कि प्रत्येक आदिम प्रकार के लिए विशिष्ट गेटर्स और सेटर्स हैं और कुछ सामान्य Object
प्रकार सामान्य हैं जो केवल Object
के मामले में काम करते हैं, या सबसे खराब Number
पर , String
, और Parcelable
), मेरी राय में।
लेकिन वैसे भी, मैंने जल्दी से पता चला कि मैं Bundle
को बढ़ाकर समस्या को ठीक नहीं कर सकता, क्योंकि इसे final
घोषित किया गया है। क्या इसके लिए कोई ज्ञात/विशिष्ट कारण है? android.os
में अन्य कक्षाएं हैं जो final
नहीं हैं, इसलिए Bundle
इस असाइनमेंट के योग्य क्या है?
इसके अलावा, इस पर काम करने के तरीके के बारे में कोई विचार? एक रैपर वर्ग बाहर है क्योंकि इसे लागू करने के लिए कोई सामान्य interface
नहीं है (कोड जो वास्तव में समस्या का कारण बनता है, किसी तृतीय-पक्ष लाइब्रेरी का हिस्सा है, इसलिए मैं इसे सीधे रैपर वर्ग में संदर्भित करने के लिए अपडेट नहीं कर सकता)।
मुझे लगता है कि कोड में सभी जगहों को शिकार करने का एकमात्र विकल्प छोड़ देता है जो कि String
मूल्यों के लिए मूल्य निर्धारित करता है जो तृतीय पक्ष कोड बाइट एरे के रूप में पारित होने की अपेक्षा करता है।
शायद इसी कारण से लॉग अंतिम है: आपको पेश करने के लिए। – AedonEtLIRA
स्ट्रिंग से बाइट तक सी # विश्व रूपांतरण में [] छोटा है, लेकिन स्पष्ट नहीं है (यानी कनवर्ट.फ्रॉमबेस 64String, या एन्कोडिंग.यूटीएफ 8.गेटबाइट्स, या कुछ अन्य एन्कोडिंग)। क्या जावा में आधिकारिक स्ट्रिंग-> बाइट [] रूपांतरण है? –
@Alexei Levenkov - हां, जावा में [स्ट्रिंग.getबाइट्स()] है (http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#getBytes())। – aroth