gpt4 book ai didi

java - 从非 Activity 类获取资源

转载 作者:行者123 更新时间:2023-12-01 12:45:20 24 4
gpt4 key购买 nike

我有一个特殊的类,它保存静态信息并根据特殊情况进行计算。这是一个特殊的自定义类,它不会扩展 Activity 的任何部分或 Android 环境。

因为这个类从未真正被实例化,所以它主要在静态级别上引用。它对我来说仍然很重要,因为我拥有许多对应用程序流程至关重要的静态枚举

问题是这样的:因为该类不会延长 android Activity 生命周期,所以我在引用应用程序资源文件中的任何字符串值时遇到问题。 (我将字符串作为特殊资源存储在自定义 XML 文件中)

一切看起来是这样的:

枚举的自定义类:

public class CreepIDs {

public static Context context = App.getContext();

public static enum CreepId {

ROBODEE(0, resourceString(R.creeps.robodee));

public final int id;
public final String name;

CreepId(int id, String name){
this.id = id;
this.name = name;
};
};

public static String resourceString(int id){
return context.getResources().getString(id);
}
}

应用程序类扩展应用程序:

public class App  extends Application{

private static Context mContext;

@Override
public void onCreate() {
super.onCreate();
mContext = getApplicationContext();
}

public static Context getContext(){
return mContext;
}
}

到目前为止,我已经使用调试功能单步调试了应用程序,并且 App.getContext() 始终返回 Context 值为 null。我不明白为什么。 我需要能够从不扩展 Android 生命周期任何部分的类中引用 R.creeps.robodee

我会通过构造函数传递上下文,但由于 CreepId 是一个 静态枚举 CreepIDs 实际上并未实例化。我只从主要 Activity 中引用它。

您认为最好的解决方案是什么?

最佳答案

所以这不太漂亮,但我找到了解决方案。在主 Activity 的 onCreate 中(现在唯一使用此信息的地方),我放置了以下代码:

CreepIDs.context = getApplicationContext();

由于context无论如何都是static public,所以我在应用启动时直接为其赋值。我只需要上下文,这样我就可以调用资源,它不会用于其他任何事情,所以我认为这对我来说根本不是问题。

最后,使用特殊的 App 类对我来说不起作用。

感谢大家的帮助。

关于java - 从非 Activity 类获取资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24760679/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com