没有上下文或活动的类中未找到资源异常

时间:2018-11-03 09:46:50

标签: android

public class EmergencyNumbersGenerator {

    private static ArrayList<EmergencyNumberFeatures> features;

    public static ArrayList<EmergencyNumberFeatures> generateEmergencyNumber()
    {

        features = new ArrayList<>();

        EmergencyNumberFeatures em = new EmergencyNumberFeatures(
                Resources.getSystem().getString(R.string.policeControl),
                Resources.getSystem().getString(R.string.policeControlNumber)
        );
    }

}

这恰好是我的代码,此类EmergencyNumberGenerator没有任何上下文。因此,我在SO中寻找从strings.xml获取字符串的解决方案,发现我可以使用

Resources.getSystem().getString(R.string.{stringID})

但是,在显示“找不到资源”时出现错误。

 android.content.res.Resources$NotFoundException: String resource ID #0x7f0d0085
    at android.content.res.Resources.getText(Resources.java:348)
    at android.content.res.Resources.getString(Resources.java:441)
    at com.utilnepal.MobileHelp.data.EmergencyNumbersGenerator.generateEmergencyNumber(EmergencyNumbersGenerator.java:20)
    at com.utilnepal.MobileHelp.ActivitiesFragment.EmergencyFragment.onCreateView(EmergencyFragment.java:43)

有关此问题的任何帮助吗?

3 个答案:

答案 0 :(得分:2)

请阅读official doc

Resources.getSystem().getString()将为您提供系统范围的字符串,而不是您的应用程序(strings.xml)中的字符串

您可以引用this question来获取应用程序上下文并按如下方式使用它:

yourContext.getResources().getString(R.string.policeControl);

答案 1 :(得分:1)

因此,Resources.getSystem()可以在您的代码中的任何地方使用。

但是,您只能获得系统资源。您在strings.xml中定义的字符串不是系统资源。

检查此链接system resources and non-system

答案 2 :(得分:1)

您需要在静态方法中传递上下文。仅使用上下文或活动,您就可以从字符串文件中获取字符串。

public static ArrayList<EmergencyNumberFeatures> generateEmergencyNumber(Context mContext)
{

    features = new ArrayList<>();

    EmergencyNumberFeatures em = new EmergencyNumberFeatures(
            mContext.getString(R.string.policeControl),
           mContext.getString(R.string.policeControlNumber)
    );
}