2017-03-04 5 views
0

nur ein einfacher Fehler, den ich habe, aber ich habe wirklich eine harte Zeit versucht, dieses Problem zu lösen. Warum wird dieses getContext() nicht angewendet?Android: getContext() Fehler

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

und mit diesem ...

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

weil das nicht in jedem Kontext zurückkehrt oder dass Zusammenhang verweist nicht auf den Inhalt, wo Ihre Methode ist Versuchen Sie 'class.this' oder' application.getContext() 'oder' getApplicationContext() ', was verfügbar ist, um den Kontext Ihrer Methode anzuzeigen. http://stackoverflow.com/questions/10641144/difference-between-getcontext-getapplicationcontext-getbasecontext-and – Roljhon

+0

dachte, ich folgte einem guten Tutorial ...: - ((sollte ich meinen Code neu erstellen? – Jay

+1

Frage ist unklar .. Bitte zeigen Sie einen [mcve] aller relevanten Codes.Bedeutung der Klassendefinition von wo Sie diese Kontextmethode aufrufen –

Antwort

2

Wie hier erklärt (https://stackoverflow.com/a/10641257/2319627)

View.getContext(): Gibt den Kontext der Ansicht derzeit ist in der Regel läuft die derzeit aktiv. Aktivität.

Activity.getApplicationContext(): Gibt den Kontext für die gesamte Anwendung zurück (der Prozess, in dem alle Aktivitäten innerhalb von ausgeführt werden). Verwenden Sie diesen anstelle des aktuellen Aktivitätskontexts, wenn Sie einen -Kontext benötigen, der an den Lebenszyklus der gesamten Anwendung gebunden ist, nicht nur die aktuelle Aktivität .

ContextWrapper.getBaseContext(): Wenn Sie innerhalb eines anderen Kontexts Zugriff auf einen Kontext benötigen, verwenden Sie einen ContextWrapper. Der Context , auf den innerhalb von ContextWrapper verwiesen wird, wird über getBaseContext zugegriffen.

Es wird also besser sein, getApplicationContext() zu verwenden, wenn Sie versuchen, einen DataBaseHelper zu verwenden.

Und Sie können getApplicationContext nur von Aktivität oder Service oder von einer Instanz des Kontexts aufrufen. Wie activity.getApplicationContext()

Sie benötigen einen Anwendungskontext für eine Datenbank Helper-Klasse. So übergeben Sie einen Kontext an die Datenbank bei der Initialisierung

ClearRecentPlayer-Methode ist in einer Aktivität? Andernfalls müssen Sie den Anwendungskontext an die Klasse übergeben, von der aus Sie die Methode ClearRecentPlayer aufrufen.

Sie entweder eine Membervariable .Context in dieser Klasse erstellen können, oder Sie können die ClearRecentPlayer Methode als ClearRecentPlayer (Context context)

+1

Ich kann nicht.Ich kann nur' getContext() 'in dieser Klasse .. Ich weiß nicht, warum – Jay

+0

versuchen Sie dies in einer Aktivität? –

+0

Sie benötigen einen Anwendungskontext für eine Datenbank Helper-Klasse Übergeben Sie bei der Initialisierung einen Kontext an die Datenbank ClearRecentPlayer-Methode befindet sich in einer Aktivität? Andernfalls müssen Sie den Anwendungskontext an die Klasse übergeben, von der Sie 'ClearRecentPlayer'-Methode aufrufen Sie können eine Elementvariable erstellen '.Context' in dieser Klasse oder Sie können die ClearRecentPlayer-Methode als' ClearRecentPlaye' aufrufen r (Kontext Kontext) ' –

2

getContext() nennen, ist nur eine verfügbare Methode eines View.

Wenn Ihre Methode in dieser Datenbankklasse ist, brauchen Sie den Kontext nicht wirklich. Oder jede Instanz von DataConn innerhalb einer eigenen Klasse.

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

im Entschuldigung. aber meine ClearRecentPlayer() -Methode ist auf "DataConn" Class ... – Jay

+0

Okay, dann, siehe Update –

+0

Ich denke, ich habe die Antwort bekommen. Ich habe den "DataConn mDHelper" geändert; zu 'this' und 'getApplicationContext()' anstelle von 'getContext()' in verschiedenen Java-Klassen verwenden. Danke @ cricket_007 – Jay

1

Versuchen getApplicationContext() statt getContext() für Aktivität/AppCompactActivity,

Verwandte Themen