1

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

public static final Context context = XXX;

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

需要明确的是:我想访问 Resources 和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();

PsgetBaseContext()返回 null,然后getApplicationContext返回 a nullPointerException

4

1 回答 1

2

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

  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. 使用依赖注入注入资源实例

于 2013-04-29T11:09:46.767 回答