我有一个特殊的类,它包含静态信息并根据特殊情况进行计算。这是一个特殊的自定义类,不会扩展活动的任何部分或Android环境。
因为类从未真正实例化,所以它主要在static
级别引用。这对我来说仍然很重要,因为我拥有一些对应用程序流程至关重要的static
enums
。
这是问题所在: 因为该类没有扩展android活动生命周期,所以我无法从Application的资源文件中引用任何字符串值。 (我将字符串存储在自定义XML文件中作为特殊资源)
以下是一切的外观:
ENUM的自定义类:
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);
}
}
APP CLASS EXEXENDING APPLICATION:
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
,其值为 { {1}}。我无法弄清楚为什么。 我需要能够从不扩展Android生命周期任何部分的类中引用 null
。
我会通过构造函数传递上下文,但由于R.creeps.robodee
是CreepId
static enum
实际上并未实例化。我只从主要活动中引用它。
您认为这里最好的解决方案是什么?
答案 0 :(得分:1)
所以它并不漂亮,但我找到了解决方案。
在onCreate
主要活动(此信息现在才被使用的唯一地方)中,我已经输入以下代码:
CreepIDs.context = getApplicationContext();
由于context
仍是static public
,我会在应用启动时直接为其分配值。我只需要上下文,所以我可以调用资源,但它不会被用于其他任何事情,所以我不认为这对我来说是一个问题。
最后,使用特殊的App
课程并不适合我。
感谢大家的帮助。
答案 1 :(得分:0)
试试这个:
public class App extends Application {
private static App INSTANCE;
@Override
public void onCreate() {
super.onCreate();
INSTANCE = this;
}
public static App getInstance() {
return INSTANCE;
}
}
对我有用。
答案 2 :(得分:0)
基于安德烈的回答:
public class App extends Application {
private static App INSTANCE;
@Override
public void onCreate() {
super.onCreate();
INSTANCE = this;
}
public static App getInstance() {
return INSTANCE;
}
}
然后,在CreepsID中:
public class CreepIDs {
public static Context context = App.getInstance();
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);
}
}
您正在调用静态方法来获取App的上下文,从而使您的静态类可以访问Activity的资源。
答案 3 :(得分:0)
此链接为我修复了一切: How can I get a resource content from a static context?
我只是意识到我应该创建一个全新的课程,除了Cristians的代码之外什么都没有。记得修改清单!
祝你好运:)