我正在关注我们的人员在Google上发表的this教程。
如果您查看第三个代码段,教程会显示从FeedReaderDbHelper
类扩展的SQLiteOpenHelper
类。
public class FeedReaderDbHelper extends SQLiteOpenHelper
然后,它显示了如何创建FeedReaderDbHelper
对象的实例,以便使用它来读取和写入数据库。
FeedReaderDbHelper mDbHelper = new FeedReaderDbHelper(getContext());
我认为问题是SQLiteOpenHelper
是一个抽象类。所以每当我在自己的程序中执行以下操作时:
MatchEntry.MatchDBHelper dbHelper = new MatchEntry.MatchDBHelper(context);
我收到错误:....MatchContract.MatchEntry is not an enclosing class
这是因为SQLiteOpenHelper
是抽象的吗?我设置我的类的方式完全相同,并且几乎模仿了文档的内容。
更新
这是迄今为止结构的样子:
public class MatchContract {
public MatchContract() {
}
public static abstract class MatchEntry implements BaseColumns {
...
...
...
}
public class MatchDBHelper extends SQLiteOpenHelper {
...
...
...
}
}
我将MatchDBHelper
置于MatchContract
课程中是否正确?我假设它需要知道SQL_CREATE_TABLE
字符串,否则它不会知道。
答案 0 :(得分:1)
这个想法是,Contract
类是数据库的抽象,因此,在MatchContract
中,您将拥有数据库的所有全局变量,并且在内部类中{{1}你将实现数据库本身的抽象(列等)。然后,使用MatchEntry
,您将管理数据库(创建,升级等)并编写SQL条目。
正如我在评论中所说,你需要将助手类创建为普通类,而不是内部类:
MatchDBHelper
作为一个完整的例子:
public class MatchContract {
public MatchContract() {
}
/// Global variables for the DB
public static abstract class MatchEntry implements BaseColumns {
// Structure of the database
}
}
public class MatchDBHelper extends SQLiteOpenHelper {
// Manage the database
}