我试图把URLs/etc等配置放入工具类的资源文件夹中使用。但是,我不想从各地的活动中传递语境。我希望能够通过路径名称访问资源(看起来像assets /专为此目的而设计),而不使用上下文来访问资源。访问没有上下文的资源
在这种特殊情况下,我想要一个单例在实例化时在配置中使用某些东西。在实例化过程中除了那一次之外,它不需要任何资源。因此,每次调用getInstance()时都必须传递一个Context,这完全是浪费。
此外,这是特定于应用程序的配置,不应该存储在共享系统文件或类似的东西。
我试图把URLs/etc等配置放入工具类的资源文件夹中使用。但是,我不想从各地的活动中传递语境。我希望能够通过路径名称访问资源(看起来像assets /专为此目的而设计),而不使用上下文来访问资源。访问没有上下文的资源
在这种特殊情况下,我想要一个单例在实例化时在配置中使用某些东西。在实例化过程中除了那一次之外,它不需要任何资源。因此,每次调用getInstance()时都必须传递一个Context,这完全是浪费。
此外,这是特定于应用程序的配置,不应该存储在共享系统文件或类似的东西。
使用
Resources.getSystem().getString(android.R.string.someuniversalstuff)
你可以在你的应用程序ABSOLUTELY任何地方使用它,即使是在静态常量声明!但仅限于系统资源。
对于本地资源使用that solution。
不幸的是,我不认为有一个真正的解决方法。我把这样的东西放在这里,并且传入getApplicationContext()而不是活动上下文。
public static AppController getAppController(Context context){
if(self == null) {
//Create instance
self = new AppController();
}
return self;
}
然后:
appController = AppController.getAppController(getApplicationContext());
我建议做以下几点: 而不是传递方面处处让您的活动类单例类与返回上下文公共职能:
private static ActivityMain instance;
初始化内部super.onCreate之前的onCreate()( ):
instance = this;
这些公共职能然后添加到您的活动:
/** Get singleton instance of activity **/
public static ActivityMain getInstance() {
return instance;
}
/** Returns context of this activity **/
public static Context getContext(){
return instance.getApplicationContext();
}
现在你可以使用任何种类的任何位置以下:
Context context = AntiMorphActivity.getContext();
String packageName = context.getPackageName();
int id = context.getResources().getIdentifier("web_page", "raw", packageName);
非常可怕的解决方案。你正在以这种方式泄露你的活动。 – 2012-12-12 14:09:07
不,他正在使用应用程序上下文,因此活动不会泄露。 – Davor 2013-01-13 12:09:40
你可以扩展主应用程序类,并提供通用的助手那里访问资源。这减轻了对上下文的需求,因为应用程序将提供上下文而不是调用者。应用程序类是单例风格的,并且应用程序的任何部分都在运行时(包括服务)应始终可用。
public class MyApplication extends Application {
protected static MyApplication instance;
@Override
public void onCreate() {
super.onCreate();
instance = this;
}
public static Resources getResources() {
return instance.getResources();
}
}
这将使您能够访问:
MyApplication.getResources()....
一定要在你的清单申报您的自定义应用程序来访问此。假设您的自定义应用程序是在应用程序的命名空间的根:
<application
android:name=".MyApplication"
... >
使用这个有什么潜在的缺点吗? – 2017-11-12 00:35:59
的计算器回答以下问题说明了如何使用POJO来获得流的资源,如果你提供的路径。如果您需要从众多资源中选择特定资源,这可能会很有用。
Is it possible to read a raw text file without Context reference in an Android library project
**但仅限系统资源。** – Youngjae 2015-11-18 14:40:13
@Youngjae yes。对于本地人来说,请参考参考资料。 – Gangnus 2015-11-19 00:07:25
我得到一个异常:android.content.res.Resources $ NotFoundException:字符串资源ID – vinidog 2016-05-29 18:50:33