从非活性类获取资源(Getting resources from non-activity clas

2019-10-29 03:41发布

我有一个储存静态信息,并基于特殊的情况下计算的特殊类。 这是一个特殊的自定义类,不延长活动或Android任何环境的任何部分

由于该类从来没有真正被实例化 ,它主要是指在static水平。 因为我举办了一些这对我来说还是很重要static enums是应用程序的流程是至关重要的。

这里的问题:由于类不延长的Android活动的生命周期,我无法从应用程序引用的资源文件的任何字符串值。 (我已经存储在自定义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类推广应用:

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 。 我想不通为什么。 我需要能够引用 R.creeps.robodee从没有延长生命周期的Android的任何部分的类。

我将通过构造函数传入上下文,但由于CreepId是一个static enum CreepIDs实际上并没有实例化。 我只是从主要活动引用它。

你认为这里是最好的解决办法?

Answer 1:

因此,它不漂亮,但我找到了解决办法。 在onCreate为主要活动(此信息甚至习惯,现在唯一的地方),我已经把下面的代码:

CreepIDs.context = getApplicationContext();

由于contextstatic public反正,应用程序启动时,我直接将值分配给它。 我只需要上下文,这样我可以调用的资源,它不会被用于其他任何东西,所以我不认为这将是我在所有问题。

最后,使用特殊的App类只是没有为我工作。

感谢大家的帮助。



Answer 2:

尝试这个:

public class App extends Application {

    private static App INSTANCE;

    @Override
    public void onCreate() {
        super.onCreate();
        INSTANCE = this;
    }

    public static App getInstance() {
        return INSTANCE;
    }

}

它的工作原理为我好。



Answer 3:

基于关安德烈的回答:

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);
}

}

你调用一个静态方法来获取应用程序的环境中,从而使您的静态类访问活动的资源。



Answer 4:

此链接固定了我的一切: 我怎样才能从静态上下文的资源内容?

我刚刚意识到我应该创建一个全新的类只是在Cristians答案代码。 记住要修改清单!

祝好运:)



文章来源: Getting resources from non-activity classes