来自静态方法的getResources(),没有上下文

时间:2013-04-29 11:02:03

标签: android resources android-context

我正在研究SQLiteOpenHelper,我将通过静态方法从中读取数据库(因为数据库是共享的)。是否可以将应用程序上下文转换为:

public static final Context context = XXX;

应该可能吗?因为我显然只是从当前应用程序调用,所以资源和数据库都在应用程序内共享。

要明确:我想访问资源和SQLiteDatabases(如果我碰巧在上下文方法上出错了)。

有可能实现吗?

修改 是否有可能从这样的内容中获取上下文(不将其作为参数传递)

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

EDIT2: 尝试@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();

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

1 个答案:

答案 0 :(得分: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. 使用依赖注入

  4. 注入Resources实例