没有上下文的java类_关于java:无上下文访问资源

我正在尝试将诸如URLs / etc之类的配置放入资源文件夹中,以供实用程序类使用。 但是,我不想从任何地方的活动中传递上下文。 我希望能够通过路径名(似乎使用assess /是为此用途而设计的)来访问资源,而无需使用上下文来访问资源。

在这种情况下,我希望单例实例化时在配置中使用某些东西。 除了实例化期间的那一次之外,它不需要任何资源。 因此,每次调用getInstance()时都必须传递Context是完全浪费的。

另外,这特定于应用程序的配置,不应存储在共享系统文件或类似的文件中。

采用

Resources.getSystem().getString(android.R.string.someuniversalstuff)

您甚至可以在静态常量声明中在应用程序中的任何地方绝对使用它!但是仅用于系统资源。

对于本地资源,请使用该解决方案。

但是仅用于系统资源。

@Youngjae是的。对于本地的,请遵循参考。

我有一个例外:android.content.res.Resources $ NotFoundException:字符串资源ID

这个答案有误导性,这个问题是指当地资源

@Abhijit有两个答案。如果您不喜欢第一个,请参考第二个。因此,它不是误导性的,相反,它可以引导您找到正确的解决方案。

您可以扩展主应用程序类,并在那里提供通用帮助程序来访问资源。这减轻了对上下文的需要,因为应用程序将提供上下文而不是调用方。应用程序类是单例样式,应在应用程序的任何部分(包括服务)运行时始终可用。

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()....

确保在清单中声明您的自定义应用程序以访问此文件。假设您的自定义应用程序位于应用程序名称空间的根目录中:

android:name=".MyApplication"

... >

使用此功能有潜在的弊端吗?

尝试执行此操作,但是很遗憾,关于清单,我不知道应该是" ...",还是不知道该代码块是否应该替换,合并或添加到现有的应用程序代码块。

在清单中的

我建议您执行以下操作:

而不是到处传递上下文,而是使您的活动类成为具有返回上下文的公共函数的单例类:

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

极其糟糕的解决方案。您正在以这种方式泄漏活动。

不,他正在使用应用程序上下文,因此活动不会泄漏。

我只是用这个而已!但是,为什么这与传递上下文不一样?我对android非常陌生。

不幸的是,我认为没有真正的解决办法。我布置了类似的内容,并传入了getApplicationContext()而不是活动上下文。

public static AppController getAppController(Context context){

if(self == null) {

//Create instance

self = new AppController();

}

return self;

}

接着:

appController = AppController.getAppController(getApplicationContext());

哦,好,我担心那会是答案。只能从上下文访问应用程序资源似乎是很糟糕的设计。我肯定是有原因的...但是它仍然很烦人。感谢您确认它=)

我和我的团队一直抱怨。这使得很难编写未耦合的模块化代码。

以下问题的stackoverflow答案显示了如果提供路径,如何使用POJO获取到资源的流。如果您需要从众多资源中选择一种,这可能很有用。

是否可以在Android库项目中读取没有上下文引用的原始文本文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值