getAdaptoer 如何与这个简单的 class 一起用于 SQlite 数据检索和存储?
How is getAdaptoer used with this simple class for SQlite data retrieval and storage?
我在 Android 应用程序中使用 SQLite 数据库。我从一个我现在似乎无法找到的特定网站推断出我的代码。但是代码包含一个 class 用于填充和检索 SQLite 数据行:我调用 class dbData。据我所知,它只是存储数据行。没有构造函数,所以显然它在使用默认调用时创建适配器的实例。 tostring 被 returned 为 dbData。但是也可以设置和获取Id。
我的大问题是为什么使用此 class 而不是其他 class 中的变量,否则将其称为 class?我的下一个问题是,如果 listAdaptor return 是适配器(根据 http://developer.android.com/reference/android/widget/ListView.html#getAdapter()),它将什么信息填充到 dbData = (dbData) lstView.getAdapter().getItem(0 );它允许 dbData return 一个字符串并获取正确的数据库行?它是否自动将适配器转换为数据库关键字段?
感谢任何反馈。
代码如下:
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
class你会做什么?您可能必须这样做:
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();
.
我在 Android 应用程序中使用 SQLite 数据库。我从一个我现在似乎无法找到的特定网站推断出我的代码。但是代码包含一个 class 用于填充和检索 SQLite 数据行:我调用 class dbData。据我所知,它只是存储数据行。没有构造函数,所以显然它在使用默认调用时创建适配器的实例。 tostring 被 returned 为 dbData。但是也可以设置和获取Id。
我的大问题是为什么使用此 class 而不是其他 class 中的变量,否则将其称为 class?我的下一个问题是,如果 listAdaptor return 是适配器(根据 http://developer.android.com/reference/android/widget/ListView.html#getAdapter()),它将什么信息填充到 dbData = (dbData) lstView.getAdapter().getItem(0 );它允许 dbData return 一个字符串并获取正确的数据库行?它是否自动将适配器转换为数据库关键字段?
感谢任何反馈。
代码如下:
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
class你会做什么?您可能必须这样做: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();
.