2013-04-29 101 views
0

我正在从SQLiteOpenHelper我从中读取数据库通过静态方法(因为数据库共享无论如何)。是否有可能获得应用程序上下文类似于:getResources()静态方法,没有上下文

public static final Context context = XXX; 

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

要清楚:我想访问资源和SQLiteDatabases(如果我碰巧是错误的上下文方法)。

是否有可能实现?

编辑: 是否有可能得到的东西里面像这样的背景下(没有把它当作一个参数)

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

EDIT2: 试图@britzl:拳头想法

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

Ps getBaseContext()返回null,并且getApplicationContext缩写为nullPointerException

+0

要访问没有上下文的资源吗?如果可能, – Blackbelt 2013-04-29 11:05:48

+0

,或者(如果存在)获得整个应用程序共享的“超级上下文”(我可以通过将它作为参数传递给它)。 – SverkerSbrg 2013-04-29 11:07:45

回答

1

我看到你的问题,有三种可能的解决方案:

  1. 创建自己的应用程序的子类,并设置为在清单文件的应用程序类。在你的子类中,你可以有一个静态的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. 使用依赖注入

注入资源实例的任何电话
+0

1.听起来很有趣,我会看看它 2.是我试图让笔直atm3.我不知道我跟着? :) – SverkerSbrg 2013-04-29 11:12:53

+0

我想你的第一个想法。我在问题中添加了代码,请帮助我从构造函数或静态方法调用中获取上下文 – SverkerSbrg 2013-04-29 11:38:04

+0

已更新#1的示例 – britzl 2013-04-29 12:05:02

相关问题