【问题标题】:Accessing Drawable resources from a non context class从非上下文类访问 Drawable 资源
【发布时间】:2010-11-07 13:59:06
【问题描述】:

我正在定义一个在对象中设置 Drawable 属性的类。问题是我无法访问getResource().getDrawable(int resourceId) 方法,除非我有一些Context。 我所做的是向该类发送一个活动实例(我们称之为“行为”),然后我做了:

act.getResources().getDrawable(R.drawable.whellchair)

但是,当执行该行时,它会抛出一个NullPointerException

什么时候想到如何做到这一点?

【问题讨论】:

  • “act”为空还是“act.getResources()”为空?
  • 嘿伙计!你刚刚给出了关键提示!我没有检查什么是空的,结果发现它是“行为”。将线路放在错误的位置时,我正在与单身人士一起工作!谢谢;)

标签: android resources nullpointerexception drawable


【解决方案1】:

我发现了问题! 我正在使用单例,我将访问“行为”的行放在静态方法中......我真是太傻了......

抱歉,感谢 Juhani 的评论 :)

【讨论】:

    【解决方案2】:

    将应用程序上下文传递给类的构造函数。在主应用程序类中,您只需调用 getApplication() 方法(如果您需要生命周期感知上下文)或 getApplicationContext()(如果您需要与当前进程相关联的上下文)来获取上下文。

    例子:

    private Context ctx = getApplication();
    
    ... some code ...
    
    MyClass myClass = new MyClass(ctx);
    

    您的类的构造函数当然必须像这样相应地处理上下文(即将 Context 类型的私有成员设置为传递的值)。

    private Context ctx = null;
    
    public MyClass(ctx) {
        this.ctx = ctx;
    }
    

    然后,您可以根据需要使用上下文。

    【讨论】:

    • 这个类是一个单例(所以它自己实例化)并且它没有扩展类 Activity 来访问 getApplication() 或 getApplicationContext()
    • 好吧,一个类不必为了获得正确的上下文而扩展 Activity(即使它会调用 getApplication() 它也很可能会在你想要显示内容时得到错误的上下文并在大多数情况下掌握主要活动中的内容)。但显然你已经解决了你的问题,所以一切都很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 2011-06-16
    • 1970-01-01
    相关资源
    最近更新 更多