2017-03-04 49 views
0

只是一個簡單的錯誤,但我真的很難試圖解決這個問題。爲什麼這個getContext()不適用?Android:getContext()error

public void ClearRecentPlayer() { 

     mDbHelper = new DataConn(getContext()); //<---getContext() in redline(not applied) 
     SQLiteDatabase db = mDbHelper.getWritableDatabase(); 

     ContentValues v = new ContentValues(); 
     v.put(FeedReaderContract.FeedEntry.COLUMN_NAME_STATS, 0); 

     String selection = FeedReaderContract.FeedEntry.COLUMN_NAME_STATS + " = ?"; 
     String[] selectionArgs = { "0" }; 
     int c = db.update(
       FeedReaderContract.FeedEntry.TABLE_NAME_PLAYER, 
       v, 
       selection, 
       selectionArgs); 
    } 

以及與此...

public class DataConn extends SQLiteOpenHelper { 
    public static final int DATABASE_VERSION = 1; 
    public static final String DATABASE_NAME = "db_egame.db"; 

    DataConn mDbHelper; 

    public DataConn(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 

    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(SQL_CREATE_EASY_ENTRIES); 
     db.execSQL(SQL_CREATE_HARD_ENTRIES); 
     db.execSQL(SQL_CREATE_DIFF_ENTRIES); 
     db.execSQL(SQL_CREATE_PLAYER_ENTRIES); 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL(SQL_DELETE_EASY_ENTRIES); 
     db.execSQL(SQL_DELETE_HARD_ENTRIES); 
     db.execSQL(SQL_DELETE_DIFF_ENTRIES); 
     db.execSQL(SQL_DELETE_PLAYER_ENTRIES); 
     onCreate(db); 
    } 

    @Override 
    public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     onUpgrade(db, oldVersion, newVersion); 
     onCreate(db); 
    } 
+0

因爲不返回任何背景或上下文不指向內容在您的方法是,請嘗試使用'class.this'或'application.getContext()'或'getApplicationContext()',這將導致實際將上下文指向您的方法所在的位置。 http://stackoverflow.com/questions/10641144/difference-between-getcontext-getapplicationcontext-getbasecontext-and – Roljhon

+0

以爲我在跟着一個很好的教程...: - ((我應該重建我的代碼嗎? – Jay

+1

問題不清楚.. 。請顯示所有相關代碼的[mcve]。這意味着你在哪裏調用該上下文方法的類定義 –

回答

2

如這裏(https://stackoverflow.com/a/10641257/2319627

解釋•View.getContext():返回上下文的觀點是目前 運行通常情況下,當前活動。活動。

Activity.getApplicationContext():返回整個應用程序的上下文(處理所有活動在 之內運行)。如果您需要將 上下文綁定到整個應用程序的生命週期,而不僅僅是當前「活動」的 ,請使用此代替當前的活動上下文。

ContextWrapper.getBaseContext():如果您需要從另一個上下文中訪問上下文 ,則使用ContextWrapper。從ContextWrapper引用的Context 可通過 getBaseContext進行訪問。

因此,當您嘗試使用DataBaseHelper時,最好使用getApplicationContext()

而且,您可以僅從活動或服務或上下文的實例中調用getApplicationContext。像activity.getApplicationContext()

您需要一個數據庫幫助程序類的應用程序上下文。因此,在初始化時將上下文傳遞到數據庫

ClearRecentPlayer方法處於活動狀態?否則,您必須將應用程序上下文傳遞給您從中調用ClearRecentPlayer方法的類。

您可以在類中創建一個成員變量.Context,或者可以調用ClearRecentPlayer方法ClearRecentPlayer (Context context)

+1

我不能。我只能在這個類中使用'getContext()'。我不知道爲什麼 – Jay

+0

你在嘗試這個活動嗎? –

+0

你需要一個數據庫輔助類的應用程序上下文。因此,在初始化時將上下文傳遞到數據庫 ClearRecentPlayer方法處於活動狀態?否則,您必須將應用程序上下文傳遞到您調用ClearRecentPlayer方法的類。 您可以創建成員變量'.Context',或者你可以調用'ClearRecentPlayer'方法作爲'ClearRecentPlaye r(上下文環境)' –

2

getContext()僅爲View的可用方法。

如果您的方法在該數據庫類中,則實際上並不需要上下文。或者在其自己班級中的任何DataConn實例。

public class DataConn extends SQLiteOpenHelper { 
    public static final int DATABASE_VERSION = 1; 
    public static final String DATABASE_NAME = "db_egame.db"; 

    private Context mContext; 

    public DataConn(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     this.mContext = context; 
    } 


    public void clearRecentPlayer() { 

     SQLiteDatabase db = this.getWritableDatabase(); 

     ContentValues v = new ContentValues(); 
     v.put(FeedReaderContract.FeedEntry.COLUMN_NAME_STATS, 0); 

     String selection = FeedReaderContract.FeedEntry.COLUMN_NAME_STATS + " = ?"; 
     String[] selectionArgs = { "0" }; 
     int c = db.update(
      FeedReaderContract.FeedEntry.TABLE_NAME_PLAYER, 
      v, 
      selection, 
      selectionArgs); 
    } 
+0

對不起。但我的ClearRecentPlayer()方法是在'DataConn'類... – Jay

+0

好吧,那麼請參閱更新 –

+0

我想我得到了答案。 我更改了'DataConn mDHelper;'只是'this',並在不同的java類中使用'getApplicationContext()'而不是'getContext()'。謝謝@ cricket_007 – Jay

1

嘗試getApplicationContext()的代替的getContext()的活動/ AppCompactActivity,