2011-09-17 28 views
9

क्या एक अलग वर्ग से getString विधि का उपयोग करने का कोई तरीका है?कक्षा से getString (R.strings ....) कॉल करें?

मैं एक स्ट्रिंग मेरी तार एक्सएमएल में जमा हो जाती है, मैं एक वस्तु में कि स्ट्रिंग का उपयोग करना चाहते हैं ... लेकिन विधि वस्तु में भी उपलब्ध नहीं है ...

कोई सुझाव?

उत्तर

8

यहाँ समाधान सुनिश्चित करें कि आपके वस्तु आवेदन संदर्भ के लिए एक संदर्भ है बनाने के लिए है

Class Swag{ 
    private Context ctx; 
    public Swag(Context ctx){ 
     this.ctx = ctx; 
    } 
    public void doSomething(){ 
     String something = ctx.getResources().getString(R.string.somestring); 
     ... 
    } 
    // or like this 
    public void makeUpperCase(Context appContext){ 
     appContext.getResources().getString(R.string.super_string_swag_yolo); 
    } 
} 

स्पष्ट रूप से आपूर्ति करना होगा संदर्भ जब एक वस्तु बनाते समय या विधि

-3

अपने जावा फ़ाइल में इस प्रयास करें:

String myString = getResources().getString(R.string.MY_STRING)

अब इस स्ट्रिंग वस्तु का उपयोग करें।

+0

getResources() संदर्भ वर्ग का एक तरीका है। आप वैध संदर्भ संदर्भ –

+0

के बिना इसका उपयोग नहीं कर सकते हैं आप GetResources का उपयोग नहीं कर सकते हैं। उसने पहले ही समझाया है क्यों। – Sotti

10

getString()Context कक्षा का एक तरीका है। यदि आपको इसे एक अलग वर्ग के अंदर चाहिए (जो Context का विस्तार नहीं करता है), तो आमतौर पर इसे विधि के लिए एक अलग तर्क के रूप में प्रदान करना सर्वोत्तम होता है।

उदाहरण:

public void logString(Context c, int stringId) { 
    Log.d("TAG", c.getString(stringId)); 
} 

एक बात महत्वपूर्ण है:कभी दुकान अलग वर्ग के अंदर संदर्भ।
एक तर्क प्रदान करें। अन्यथा आप स्मृति को रिसाव करेंगे और पूरे एंड्रॉइड लाइफसाइक्ल को बाधित करेंगे यदि संदर्भ संग्रहीत ऑब्जेक्ट उस ऑब्जेक्ट से अधिक समय तक रहता है जहां संदर्भ मूल रूप से संबंधित है (उदा। एक गतिविधि)।

¹ getString() भी Resources वर्ग से इस्तेमाल किया जा सकता है - आप के माध्यम से Context.getResources()

+0

धन्यवाद मैं ऑब्जेक्ट को संदर्भ पास कर रहा हूं क्योंकि मैं इसे अधिक स्ट्रिंग्स का उपयोग करने के लिए विस्तारित कर सकता हूं, इसलिए मैं ऑब्जेक्ट को डेटासर्वर से डेटा प्राप्त करने के बाद से अधिक पैरामीटरों में गुजरना नहीं चाहता ... – Mars

+0

से डेटा प्राप्त करना वेब और संदर्भ का उपयोग करते हुए: आपकी कक्षा कैसे काम करती है, इसके आधार पर, मैं सुझाव दूंगा कि आप एक ['सेवा'] (http://developer.android.com/reference/android/app/Service.html) (जो विस्तारित हो) प्रसंग)। यह एंड्रॉइड लाइफसाइकिल के साथ बढ़िया काम करता है और आपको जो चाहिए वह प्रदान करता है। –

1

संपादित प्राप्त कर सकते हैं जो: नीचे कार्य नहीं करेगा। मैंने इसे किसी अन्य साइट पर पढ़ा और माना कि यह काम करता है, लेकिन मैंने इसे अपने ऐप में अभी कोशिश की और एक त्रुटि प्राप्त की। समस्या यह है कि यह संकलित होगा लेकिन आपको रनटाइम अपवाद मिलेगा।

यह किसी भी जावा वर्ग से काम करेगा:

import android.content.res.Resources 

Resources.getSystem().getString(R.string.blah); 
+1

मुझे लगता है कि आपका मतलब है 'नीचे काम नहीं करेगा' – TheMethod

+0

अपडेट के लिए धन्यवाद .. मुझे याद नहीं है कि मैंने आपका जवाब क्यों स्वीकार कर लिया है लेकिन यह निश्चित रूप से काम नहीं करेगा ... – Mars

+0

स्टूडियो नहीं मिल पा रहा है सिस्टम() विधि –

6

resouce फ़ाइल caling: मूल्यों/strings.xml

<resources> 
    <string name="app_name">App name</string> 
<resources> 

जावा

import android.content.res.Resources; 
Resources.getSystem().getString(R.string.app_name);//result : App name 
+0

स्टूडियो getSystem() विधि नहीं मिल सकता है –

0

अगर आप, पैरामीटर के रूप में एक संदर्भ पारित नहीं हो सकता एक और वर्ग है, जहां आप अपने सभी स्थिर डेटा डाल पैदा करते हैं।

उदाहरण:

public class StaticData { 
    public static String BASE_URL = "https://stackoverflowrocks.com"; 
} 

और सीधे कॉल StaticData द्वारा अपने अन्य वर्ग से कि स्ट्रिंग मिलता है।BASE_URL

अच्छे और साफ।

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