有沒有辦法從一個單獨的類使用getString方法?從類中調用getString(R.strings ....)?
我已經保存在我的字符串的XML字符串,我想使用該字符串中的對象......但這種方法是不是即使在對象可用...
任何提示?
有沒有辦法從一個單獨的類使用getString方法?從類中調用getString(R.strings ....)?
我已經保存在我的字符串的XML字符串,我想使用該字符串中的對象......但這種方法是不是即使在對象可用...
任何提示?
這裏的解決辦法是,以確保您的對象涉及到應用程序上下文的引用
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);
}
}
顯然你必須提供創建對象時或創建對象時的上下文
試試這個在你的java文件:
String myString = getResources().getString(R.string.MY_STRING)
現在使用這個字符串對象。
getString()
是Context
類別1的方法。如果你需要它在一個單獨的類中(不擴展爲Context
),通常最好將它作爲需要它的方法的單獨參數提供。
例子:
public void logString(Context c, int stringId) {
Log.d("TAG", c.getString(stringId));
}
有一件事是重要的:決不商店單獨的類裏面的內容。
提供一個參數。否則,如果存儲上下文的對象比上下文最初屬於的對象(例如活動)的壽命更長,則會泄漏內存並破壞整個Android生命週期。
¹getString()
也可以從Resources
類使用 - 您可以通過Context.getResources()
謝謝我最終將上下文傳遞給對象,因爲我可能會擴展它以使用更多的字符串,所以我不想傳遞給很多參數,因爲對象從Web服務器獲取它的數據... – Mars
從網絡和使用上下文:根據你的類的工作方式,我建議你可以建立一個['Service'](http://developer.android.com/reference/android/app/Service.html)(它擴展了上下文)。這對於android生命週期很有效,並提供您所需要的。 – 2011-09-17 12:27:03
資源文件: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
工作室找不到getSystem()方法 –
,如果你不能傳遞一個上下文參數,創建另一個類,你把你所有的靜態數據。
例如:
public class StaticData {
public static String BASE_URL = "https://stackoverflowrocks.com";
}
,並通過直接調用 StaticData從您的其他類的字符串。BASE_URL
非常乾淨。
getResources()是Context類的一種方法。如果沒有有效的上下文引用,則不能使用它 –
不能使用getResources。他已經解釋了爲什麼。 – Sotti