我正在尝试了解负责与数据库建立连接的类 代码是:
public class DBAdapter
{
final Context context;
DatabaseHelper DBHelper;
SQLiteDatabase db;
public DBAdapter(Context ctx)
{
this.context = ctx;
DBHelper = new DatabaseHelper(context);
}
private static class DatabaseHelper extends SQLiteOpenHelper
{
DatabaseHelper(Context context)
{
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
//All the necessary method are implemented.
}
}
所以要做一个连接我应该只是“
DBAdapter db=new DBAdapter(this);
我的问题是此行this.context = ctx;
的作用是什么:
为什么我们不能简单地省略它:
public DBAdapter(Context ctx)
{
DBHelper = new DatabaseHelper(ctx);
}
答案 0 :(得分:1)
通过此关键字,您指定将在ctx变量中进入DBAdapter方法的活动类的地址或引用(具有上下文类型)将分配给类级别的上下文变量。
虽然您可以删除类级别变量和this.context = ctx;
行,但只需按照指定的内容编写
public DBAdapter(Context ctx)
{
DBHelper = new DatabaseHelper(ctx);
}
但是如果你想对所有类使用ctx(上下文引用)值,建议使用类变量。
答案 1 :(得分:0)
如果您正在学习本教程,那么他们有一个Context类变量,因为它们在open方法中引用它。
public DbAdapter(Context ctx)
{
this.mCtx = ctx;
mUsername = PreferenceManager.getDefaultSharedPreferences(ctx).getString(Preferences.USERNAME, "");
}
public DbAdapter open() throws SQLException
{
mDbHelper = new DatabaseHelper(mCtx);
mDb = mDbHelper.getWritableDatabase();
return this;
}
答案 2 :(得分:0)
根据您的班级代码。您不需要将上下文分配给另一个上下文变量。这是简化的代码。
public class DBAdapter
{
DatabaseHelper DBHelper;
SQLiteDatabase db;
public DBAdapter(Context ctx)
{
DBHelper = new DatabaseHelper(ctx);
}
private static class DatabaseHelper extends SQLiteOpenHelper
{
DatabaseHelper(Context context)
{
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
//All the necessary method are implemented.
}
}
在其他方法中使用上下文时,将上下文分配给另一个变量很有用。因为变量的范围仅限于其方法。你不能在构造函数之外使用它(根据你的代码)