2013-04-29 96 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

相關問題