有没有办法从单独的类中使用getString方法?
我的字符串xml中存储了一个字符串,我想在对象中使用该字符串...但该对象中的方法甚至不可用...
任何提示?
答案 0 :(得分:12)
getString()
是Context
类¹的一种方法。如果你需要在一个单独的类(不扩展Context
)中,通常最好将它作为需要它的方法的单独参数。
示例:
public void logString(Context c, int stringId) {
Log.d("TAG", c.getString(stringId));
}
有一点很重要: 从不将上下文存储在单独的类中。
提供一个论点。否则,如果存储上下文的对象比上下文最初所属的对象(例如活动)长,则会泄漏内存并中断整个android生命周期。
¹ getString()
也可以在Resources
课程中使用 - 您可以通过Context.getResources()
获取
答案 1 :(得分: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);
}
}
显然,你必须在创建对象时或在调用方法时提供上下文
答案 2 :(得分:7)
resouce file: 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
答案 3 :(得分:1)
编辑: 以下将不起作用。我在另一个网站上看到这个,并认为它有效,但我只是在我的应用程序中尝试了它并且一直出错。问题是,它会编译,但你会得到一个运行时异常。
这适用于任何java类:
import android.content.res.Resources
Resources.getSystem().getString(R.string.blah);
答案 4 :(得分:0)
如果您不能将上下文作为参数传递,请创建另一个类,放置所有静态数据。
示例:
public class StaticData {
public static String BASE_URL = "https://stackoverflowrocks.com";
}
通过直接调用从其他类中获取该字符串 StaticData.BASE_URL
干净整洁。
答案 5 :(得分:-1)
这样可行,但仅适用于SYSTEM资源:
import android.content.res.Resources
Resources.getSystem().getString(R.string.blah);
答案 6 :(得分:-3)
在你的java文件中试试这个:
String myString = getResources().getString(R.string.MY_STRING)
现在使用此字符串对象。