2013-02-25 53 views
11

मुझे पता चलेगा कि वैश्विक स्थिरांक को संग्रहीत करने के लिए सबसे अच्छा अभ्यास क्या है जो संकलन समय पर पर्यावरण (डीबग, प्रीप्रोड, प्रोड, रिलीज इत्यादि) के साथ बदल सकता है।एंड्रॉइड एप्लिकेशन में वैश्विक स्थिरांक कहां स्टोर करें?

आईओएस में, मैं एक हेडर फाइल में सभी वैश्विक स्थिरांक रखने के लिए और यह जवाब देखने के पूर्व प्रोसेसर मैक्रो के साथ इसे बदलने के लिए प्रयोग किया है:

Where to store global constants in an iOS application?

मैं Android के लिए क्या समाधान इस्तेमाल करना चाहिए?

उत्तर

17

अपने बेस पैकेज फ़ोल्डर में कक्षा स्थिरांक बनाएं।

(या एक इंटरफ़ेस के बजाय एक वर्ग बनाने इसलिए वर्ग हर संदर्भित करने के लिए कोई जरूरत नहीं है, लेकिन इस कोड पठनीयता के कारण bad practice है, लेकिन यह काम करेंगे)

public static final मूल्यों के साथ यह भरें।

इसके अलावा, class दोनों के साथ-साथ interface को भी abstract के रूप में घोषित किया जा सकता है।

+1

ठीक है, लेकिन मैं इसे "संकलन-समय" में कैसे बदल सकता हूं? मैं स्टोर नहीं करना चाहता, उदाहरण के लिए, तीन मान तीन बार (3 अलग-अलग वातावरण के लिए) और जब मैं चाहूं तो उन सभी को टिप्पणी करना चाहता हूं। – klefevre

+0

3 अलग-अलग परिवेशों के साथ आप परियोजनाओं का मतलब है? फिर एक लाइब्रेरी एप्लिकेशन बनाएं, जिसमें आप अपनी स्थिरांक-वर्ग बनाते हैं, आप इसे जितनी चाहें उतनी परियोजनाओं के लिए लाइब्रेरी के रूप में जोड़ सकते हैं। – Nickolaus

+2

नहीं, मेरा मतलब है कि एक प्रोजेक्ट के लिए डीबग, प्रीप्रोड या प्रोड जैसे 3 वातावरण। मैं बदलना चाहता हूं, उदाहरण के लिए, मेरे webservice API 'http://prepod.xxx.com/ws', 'http://www.xxx) के आधार URL (जैसे मेरे प्रश्न में उद्धृत उत्तर की तरह)। कॉम/डब्ल्यूएस ',' http://192.168.1.42/ws 'जैसे "डेबग", "प्रीप्रोड", "प्रोड" – klefevre

2

यदि आपके स्थिरांक के लिए मान पर्यावरण (घनत्व, लोकेल इत्यादि) पर निर्भर करते हैं तो आपको उन्हें (पूर्णांक, स्ट्रिंग, dimen आदि) को संग्रहीत करने के लिए संसाधनों का उपयोग करना चाहिए।

एक और मामले में आप अपने वैश्विक स्थिरांक को एक फ़ाइल (सर्वोत्तम प्रथाओं - स्थिरांक के प्रत्येक सेट के लिए उपसर्ग का उपयोग करें) में डाल सकते हैं या संबंधित वर्गों में स्थानीय स्थिरांक डाल सकते हैं (उदाहरण के लिए, इरादा झंडे रखता है। अतिरिक्त, श्रेणियां और इसी तरह) ।

+0

बदलने के लिए केवल 1 स्थिरता के साथ आप मुझे अपने उत्तर plz को चित्रित करने के लिए एक स्निपेट दिखा सकते हैं? – klefevre

+0

जैसा कि मैंने उपर्युक्त आपकी टिप्पणी को समझ लिया है, आपको मेवेन (स्वचालित भवन के लिए टूल) का उपयोग करना चाहिए। आप अलग-अलग कॉन्फ़िगरेशन के लिए विभिन्न स्थिरांक निर्धारित कर सकते हैं और मेवेन आपके लिए अलग-अलग एपीके बनाएगा (प्रत्येक एपीके स्थिरांक के एक सेट का उपयोग करता है)। विवरण के लिए यह प्रश्न देखें http://stackoverflow.com/questions/13867148/maven-and-android-slightly- dififferent-builds-for- अलग- वातावरण – tundundun

2

उपयोग public static final values. और इस प्रकार उन्हें अलग जावा फ़ाइल रखें:

static String QC = "http:/************"; 
    static String DEV = "http:/************"; 
    static String CLOUD = "http:/************"; 


    static String SERVICEURL = CLOUD ; //Use this SERVICEURL in your code at run time 
2

एक अन्य समाधान संसाधन फ़ाइल का उपयोग करने के (यदि आप केवल स्ट्रिंग मान संग्रहीत करने के साथ सामग्री रहे हैं) हो सकता है।

पूर्व:

इस तरह के खाते कि इस आवेदन का प्रबंधन करता है के रूप में स्थिरांक स्टोर करने के लिए इस्तेमाल किया जा सकता। WelcomeActivity.java

AccountManager am = AccountManager.get(WelcomeActivity.this); 
Account account = am.getAccountsByType(getResources().getString(R.string.ACCOUNT_TYPE))[0]; 

पूर्व। res/values ​​/ strings.xml

<resources> 
    <string name="ACCOUNT_NAME">com.acme.MyAccountSignature</string> 
</resources> 

यह भी आप इस आवश्यकता के बिना (इसी तरह कैसे आप सामान्य रूप से, अनुवाद दसगुणा हैं जो strings.xml फ़ाइल सबसे अच्छा के लिए प्रयोग किया जाता है करने के लिए) को संशोधित करने की अनुमति होगी पुन: संयोजित करने के लिए।

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

  • कोई संबंधित समस्या नहीं^_^