Android - 无法创建数据库实例

时间:2014-05-03 19:06:58

标签: android database sqliteopenhelper

我正在关注我们的人员在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字符串,否则它不会知道。

1 个答案:

答案 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
}