从类中调用getString(R.strings ....)?

时间:2011-09-17 11:28:06

标签: android class object android-context

有没有办法从单独的类中使用getString方法?

我的字符串xml中存储了一个字符串,我想在对象中使用该字符串...但该对象中的方法甚至不可用...

任何提示?

7 个答案:

答案 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);

参考:https://stackoverflow.com/a/40917607/8994882

答案 6 :(得分:-3)

在你的java文件中试试这个:

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

现在使用此字符串对象。