2012-04-12 70 views
3

在我的SQLite設置類中,我有一個DbHelper,它需要一個Context作爲其一部分。要設置上下文,我只需要在我的SQLite類中使用一個構造函數,該構造函數需要一個上下文作爲其參數的一部分。來自非活動類的Android上下文

但是我剛遇到一個問題。當試圖從一個不是Activity的類中調用我的SQLite類時,我不能將它作爲context classname.this使用,而且它正在擾亂我。

我也試圖這樣做是爲了宣佈一個背景:

protected Context context; 

再後來就這樣稱呼它:

SetSql PlayerObject = new SetSql(This.context); 

但是,這也不能工作。

有什麼建議嗎?

+0

http://stackoverflow.com/questions/9725394/android-context-outside-of-activity-class/9725458#9725458 – 2012-04-12 20:45:18

+0

我試過,我得到一個「沒有封閉的類型活動的實例是可訪問的範圍「 – arielschon12 2012-04-12 20:51:05

+1

IMO,您應該始終將應用程序,而不是活動,上下文傳遞給這些類型的東西。 – Phix 2012-04-12 20:55:42

回答

6

通應用程序上下文的這段視頻,下載代碼部分-III這樣

SetSql PlayerObject = new SetSql(this.getApplicationContext()); 

現在應該工作正常。

+0

我不認爲它會起作用,因爲我的課不像我提到的那樣是一個Activity,它不是清單文件中的安裝程序。我試過了,它說方法getApplicationContext()對於RandPlayers(我的類)是未定義的。如果我需要,我怎樣才能在清單文件中設置它? – arielschon12 2012-04-13 08:55:15

+1

創建一個靜態全局變量'static Context appContext;'並在'appContext'中分配應用程序上下文。 'appContext = getApplicationContext();'在''main'''onCreate()'方法中。現在可以在您的非活動課程中進行訪問。 '新的SetSql(MainActivity.appContext);' – Ravi1187342 2012-04-13 09:28:59

+0

主要活動,你的意思是第一次啓動?那將是我的飛濺活動。你是這個意思嗎? – arielschon12 2012-04-13 09:37:05

-1
public class DBHelper extends SQLiteOpenHelper { 

private static final String TAG = "DBHelper"; 
private static final int DB_VERSION = 1; 

private Context context; 
private String DB_PATH; 
private String DB_NAME; 
private String TABLE_NAME; 
private boolean booCreate; 
private String createString; 
private SQLiteDatabase myDataBase; 

public DBHelper(Context context, String db_name, String table_name, 
     boolean booCreate, String createString) { 
    super(context, db_name, null, DB_VERSION); 
    this.context = context; 
    this.DB_NAME = db_name; 
    this.DB_PATH = "/data/data/" + FindPackageName() + "/databases/"; 
    Log.d(TAG, "DBPATH=" + DB_PATH); 
    this.TABLE_NAME = table_name; 
    this.createString = createString; 
    this.booCreate = booCreate; 
    Log.d(TAG,"booCreate=" + String.valueOf(this.booCreate)); 
    try { 
     createDataBase(); 
    } catch (IOException e) { 
     throw new Error("Unable to Create Database"); 
    } 
} 

,並在您的活動

dbHelper = new DBHelper(this, this.getString(R.string.db_name_contact), 
      this.getString(R.string.table_name_contacts), true, createString); 

關注此tutorial

+0

我怕這段代碼會改變我的應用程序中的一些我不能改變的東西。你碰巧知道一個簡單的解決上下文問題? – arielschon12 2012-04-13 08:56:22

相關問題