2009-12-31 13 views
53

मैंने सोचा कि मैं उत्तम दर्जे का हूं और स्ट्रिंग.एक्सएमएल फ़ाइल का उपयोग अपवाद संदेशों जैसी चीजों के लिए कुछ स्थिर तारों को परिभाषित करने के लिए करता हूं। Strings.xml में मैंने हिट किया, "स्ट्रिंग" विकल्प चुना ('स्ट्रिंग ऐरे' नहीं), फिर इसे एक नाम और मान दिया। मैं देखना है कि इस कोड काम नहीं करता हैरान था:ग्रहण/जावा - आरस्ट्रिंग में मान। * वापसी int?

throw new Exception(R.string.MyExceptionMessage); 

और वह विफल रहता है क्योंकि R.string.MyExceptionMessage प्रकार int की वास्तव में है। मैं आर। जावा में देखकर उस प्रकार को सत्यापित कर सकता हूं। मैं क्या खो रहा हूँ?

उत्तर

100

R कक्षा में सबकुछ एक संदर्भ है, इसलिए इसे int के रूप में परिभाषित किया गया है।

अपने कोड — भीतर एक Android Context चल रहे हैं या — पर पहुंच प्राप्त है, तो आप context.getString(R.string.my_exception_message) फोन वास्तविक String मूल्य प्राप्त कर सकते हैं।

या, अपवाद तार जैसी चीजों अनुवाद किया जाना है की आवश्यकता नहीं है कि और इसलिए सख्ती से, एक Android संसाधन .xml फ़ाइल में परिभाषित किया जा की जरूरत नहीं है तुम StringConstants इंटरफ़ेस के कुछ प्रकार में स्थिरांक के रूप में तार संग्रहीत कर सकती है के लिए । इस तरह आप उपयोगिता वर्गों के भीतर से तारों का उल्लेख कर सकते हैं जिनके पास Context तक पहुंच नहीं हो सकती है।

+8

क्रिस दोनों खातों पर सही है। Context.getString आपके स्ट्रिंग संसाधन को लोड करता है। लेकिन गैर-स्थानीय सामानों को वहां रखने से सावधान रहें क्योंकि यह अनुवाद के लिए आपके तारों के साथ मिल जाएगा। मैं इसे उत्तम दर्जे का नहीं मानूंगा, लेकिन आपके यूआई स्ट्रिंग को एक्सएमएल फाइलों में रखना होगा, न कि कोड में। एक निश्चित बिंदु पर आप अपने ऐप्स को अन्य देशों में वितरित करना चाहते हैं, और उन्हें कोड से बाहर निकालने के लिए बहुत सारे प्रयासों की आवश्यकता होगी। इसे अभी करें और सिरदर्द बचाओ। मेरे पास चीन में एक वितरक है, मैं उसे अनुवाद के लिए स्ट्रिंग्स.एक्सएमएल भेजता हूं, कोई प्रयास नहीं। विनम्र, एर – BeMeCollective

5

क्रिस सही है। लेकिन क्या होगा यदि आप अपवाद स्ट्रिंग को भी स्थानीयकृत करना चाहते हैं। उदाहरण के लिए आप एक अपवाद फेंक देते हैं और जब आप इसे पकड़ते हैं तो आप उपयोगकर्ता को अपवाद संदेश दिखाना चाहते हैं। मैं उन्हें strings.xml में डालने के लिए, लेकिन एक ही समय में मैं क्योंकि मुझे लगता है कि अगर आप एक अपवाद मिल गया शायद आप नहीं चाहते हैं तो इस कोड

throw new Exception(context.getString(R.string.my_exception_message)) 

उपयोग करने के लिए नहीं करना चाहती चाहते हैं और आप कर सकते हैं ' अपवाद संदेश प्राप्त करने के लिए कुछ अतिरिक्त कोड का उपयोग नहीं करें।

मुझे लगता है कि एकमात्र समाधान अपने मुख्य गतिविधि में इस संदेश के लिए एक स्थिर स्ट्रिंग घोषित करने और संभव के रूप में यह रूप में जल्द ही प्रारंभ इस तरह (OnCreate() विधि में उदाहरण के लिए) के लिए होगा:

private static String my_exception_message; 

public onCreate() 
{ 
    my_exception_message = context.getString(R.string.my_exception_message); 
} 

तो जब आप अपवाद फेंकते हैं तो आपके पास इसका उपयोग करने के लिए आपका स्थानीय संदेश तैयार होता है। आपको क्या लगता है? आप कुछ अन्य समाधानों के बारे में सोच सकते हैं?

29

"getResources()। GetString (id)" विधि का उपयोग करें।

getResources().getString(R.string.title_activity) 

और बूम, आपके पास स्ट्रिंग है। मान स्ट्रिंग में अपनी स्ट्रिंग.एक्सएमएल फ़ाइल में उस स्ट्रिंग को स्टोर करना सुनिश्चित करें।

+1

getResources() विधि हमेशा उपलब्ध नहीं है। –

+0

"विधि को हल नहीं कर सकता स्रोत स्रोत" – moonvader

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