【问题标题】:getResources() from static method, without contextgetResources() 来自静态方法,没有上下文
【发布时间】:2013-04-23 00:32:44
【问题描述】:

我正在处理SQLiteOpenHelper,我将通过静态方法从中读取数据库(因为无论如何数据库都是共享的)。是否可以将应用程序上下文设置为:

public static final Context context = XXX;

应该可以吧?因为我显然只从当前应用程序调用,并且资源和数据库都在应用程序内部共享。

明确一点:我想访问 Resources 和 SQLiteDatabases(如果我碰巧对上下文方法有误)。

有可能实现吗?

编辑: 是否可以从内部获取上下文(不将其作为参数传递)

public class foo{
    foo(){
        XXX.getResources();
    }
}

编辑2: 尝试@britzl:s 拳头想法

public class SpendoBase extends Application{
private static Context context;
public SpendoBase(){
    System.out.println("SPENDOBASE: " + this);
    System.out.println("SPENDOBASE: " + this.getBaseContext());
}
public static Context getContext(){
    return this.context;
}

}

我如何掌握上下文?在构造函数中或形成getContext();

getBaseContext() 返回 null,getApplicationContext 则返回 nullPointerException

【问题讨论】:

  • 你想在没有上下文的情况下访问资源吗?
  • 如果可能,或者(如果存在)获取一个由整个应用程序共享的“超级上下文”(我可以在不将其作为参数传递的情况下获取它)。

标签: android resources android-context


【解决方案1】:

我看到您的问题的三种可能解决方案:

  1. 创建您自己的 Application 子类并将其设置为清单文件中的应用程序类。在您的子类中,您可以有一个静态 getInstance() 方法,该方法可以从应用程序中的任何位置为您提供应用程序上下文(以及资源​​)。示例:

    public class BaseApplication extends Application {
    
        private static BaseApplication instance;
    
        public BaseApplication() {
            super();
            instance = this;
        }
    
        public static BaseApplication getInstance() {
            return instance;
        }
    }
    

    在 AndroidManifest.xml 中:

    <application android:name="com.example.BaseApplication" ...>
        ...activities
    </application>
    
  2. 将上下文传递给您在 SQLiteOpenHelper 中进行的任何调用

  3. 使用依赖注入注入资源实例

【讨论】:

  • 1.听起来很有趣,我会调查一下 2. 我是不是想把 atm 弄得一团糟 3. 不太确定我是否遵循? :)
  • 我正在尝试你的第一个想法。我在问题中添加代码,你能帮我从构造函数或静态方法调用中获取上下文吗
  • 更新了 #1 的示例
  • 谢谢!这将使我能够构建更好的结构:D
  • 就我个人而言,我更喜欢不需要像这样的静态访问的设计,但我很高兴它在你的情况下得到了解决!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多