我只是一个简单的错误,但我真的很难解决这个问题。为什么getContext()
未应用?
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 :(得分:2)
如此处所述(https://stackoverflow.com/a/10641257/2319627)
•
View.getContext()
:返回视图当前的上下文 运行。通常是当前活动的活动。•
Activity.getApplicationContext()
:返回的上下文 整个应用程序(所有活动都在里面运行的过程) 的)。如果需要,请使用此代替当前的Activity上下文 上下文绑定到整个应用程序的生命周期,而不仅仅是 当前活动。•
ContextWrapper.getBaseContext()
:如果您需要访问上下文 在另一个上下文中,您使用ContextWrapper。上下文 从内部引用ContextWrapper是通过访问 getBaseContext。
因此,当您尝试使用DataBaseHelper时,最好使用getApplicationContext()
。
并且,您可以仅从活动或服务中调用getApplicationContext
,或从上下文实例调用activity.getApplicationContext()
。与ClearRecentPlayer
您需要数据库助手类的应用程序上下文。因此,在初始化
时将上下文传递给数据库 ClearRecentPlayer方法是否在活动中?否则,您必须将应用程序上下文传递给您调用.Context
方法的类。
您可以在该课程中创建成员变量ClearRecentPlayer
,也可以将ClearRecentPlayer (Context context)
方法称为u.user
答案 1 :(得分:2)
getContext()
只是View
的可用方法。
如果您的方法在该数据库类中,则实际上并不需要Context。或者在其自己的类中的任何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);
}
答案 2 :(得分:1)
为activity / AppCompactActivity尝试 getApplicationContext()而不是 getContext(),