我在Android应用程序中使用SQLite数据库。我从一个似乎无法找到的特定网站推断了我的代码。但是代码包含一个用于填充和检索SQLite数据行的类:我称该类为dbData。据我所知,它只是存储数据行。没有构造函数,因此显然在使用默认值调用时会创建适配器的实例。该tostring作为dbData返回。但是也可以设置和获取ID。

我的大问题是,为什么要使用此类而不是其他称为此类的类中的变量?我的下一个问题是,如果listAdaptor返回适配器(每个http://developer.android.com/reference/android/widget/ListView.html#getAdapter()),它将什么信息填充到dbData =(dbData)lstView.getAdapter()。getItem(0)行中的dbData中?它允许dbData返回一个字符串并获取正确的数据库行?是否自动将适配器转换为数据库密钥字段?

感谢您的任何反馈。

这是代码:

public class dbData {

    private long id;
    private String dbData;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getDbData() {
        return dbData;
    }

    public void setDbData(String dbData) {
        this.dbData = dbData;
    }

    // Will be used by the ArrayAdapter in the ListView
    @Override
    public String toString() {
        return dbData;
    }

}


这是一个如何称为它的示例:

public void onClick(View view) {
    @SuppressWarnings("unchecked")

    ListView lstView = (ListView)findViewById(R.id.lstHolidays);

    ArrayAdapter<dbData> adapter = (ArrayAdapter<dbData>) lstView.getAdapter();
    dbData dbData = null;
    switch (view.getId()) {
        case R.id.add:
            String[] comments = new String[] { "Cool", "Very nice", "Hate it" };
            int nextInt = new Random().nextInt(3);
            // save the new dbData to the database
            dbData = datasource.createDB_Row(comments[nextInt]);
            adapter.add(dbData);
            break;
        case R.id.delete:
            if (lstView.getAdapter().getCount() > 0) {
                dbData = (dbData) lstView.getAdapter().getItem(0);
                datasource.deleteDB_Row(dbData);
                adapter.remove(dbData);
            }
            break;
    }
    adapter.notifyDataSetChanged();
}

最佳答案

如您所说,您在这里有几个问题。


为什么要使用dbData?答案:因为这使得处理数据库行成为可能。在此:

dbData = (dbData) lstView.getAdapter().getItem(0);


如果没有dbData类,您将怎么办?您可能需要这样做:

dbData_id = (Long) lstView.getAdapter().getItem(0).getItem(0);
dbData_dbData = (String) lstView.getAdapter().getItem(0).getItem(1);


现在想象一下,如果数据库中有20或30个字段,那就这样做。
dbData = (dbData) lstView.getAdapter().getItem(0);行将哪些信息填充到dbData中?

这使得dbData(变量)包含对dbData对象的引用。由于您使用的是ArrayAdapter,因此此引用来自数组。这里没有数据库魔术,只有数组访问权限。
是否自动将适配器转换为数据库密钥字段?

我不懂你的意思不,它只是从数组中获取一个元素(隐藏在ArrayAdapter内部)。
因为不使用ArrayAdapter<dbData> adapter = (ArrayAdapter<dbData>) lstView.getAdapter();行,它重要吗?

使用。在下面查看几行,然后看到adapter.add(dbData);。还有adapter.remove(dbData);adapter.notifyDataSetChanged();

关于java - 这个简单的类如何将getAdaptoer与SQlite数据检索和存储一起使用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28445741/

10-10 01:13