2011-09-17 58 views
9

有沒有辦法從一個單獨的類使用getString方法?從類中調用getString(R.strings ....)?

我已經保存在我的字符串的XML字符串,我想使用該字符串中的對象......但這種方法是不是即使在對象可用...

任何提示?

回答

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

試試這個在你的java文件:

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

現在使用這個字符串對象。

+0

getResources()是Context類的一種方法。如果沒有有效的上下文引用,則不能使用它 –

+0

不能使用getResources。他已經解釋了爲什麼。 – Sotti

10

getString()Context類別1的方法。如果你需要它在一個單獨的類中(不擴展爲Context),通常最好將它作爲需要它的方法的單獨參數提供。

例子:

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

有一件事是重要的:決不商店單獨的類裏面的內容。
提供一個參數。否則,如果存儲上下文的對象比上下文最初屬於的對象(例如活動)的壽命更長,則會泄漏內存並破壞整個Android生命週期。

¹getString()也可以從Resources類使用 - 您可以通過Context.getResources()

+0

謝謝我最終將上下文傳遞給對象,因爲我可能會擴展它以使用更多的字符串,所以我不想傳遞給很多參數,因爲對象從Web服務器獲取它的數據... – Mars

+0

從網絡和使用上下文:根據你的類的工作方式,我建議你可以建立一個['Service'](http://developer.android.com/reference/android/app/Service.html)(它擴展了上下文)。這對於android生命週期很有效,並提供您所需要的。 – 2011-09-17 12:27:03

1

編輯得到: 下面將不起作用。我在另一個網站上閱讀了這篇文章,並認爲它有效,但我只是在我的應用程序中嘗試過,並且一直在收到錯誤。問題是,它會編譯,但你會得到一個運行時異常。

這將會從任何Java類工作:

import android.content.res.Resources 

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

我想你的意思是'下面將無法工作' – TheMethod

+0

感謝您的更新..我不記得爲什麼我接受你的答案,但這絕對不會工作... – Mars

+0

工作室無法找到getSystem()方法 –

6

資源文件:values/strings.xml

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

的Java

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

非常乾淨。