【发布时间】:2015-12-29 04:55:29
【问题描述】:
我目前正尝试在我的 Android 应用中显示数据库信息。
我希望数据以表格形式显示:
+----------+----------+-----+----------+
| column 1 | column 2 | ... | column n |
+----------+----------+-----+----------+
| xxxx | xxxx | ... | nnnn |
| yyyy | yyyy | ... | nnnn |
| .... | .... | ... | nnnn |
| zzzz | zzzz | ... | nnnn |
+----------+----------+-----+----------+
在查看HERE 的信息时,看来我需要使用带有 SimpleCursorAdapter 的 GridView。
所以,我创建了一个扩展 SQLiteOpenHelper 的 DatabaseHelper 类。在那个类中,我有一个为查询返回游标的方法:
public static final String DATABASE_NAME = "myDatabaseName";
public static final int DATABASE_VERSION = 1;
public static final String TABLE_NAME = "myDatabaseTableName";
public DatabaseHelper(Context context){
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public static final String MY_QUERY = "SELECT * FROM " + TABLE_NAME;
public Cursor getDataCursor(){
SQLiteDatabase sqliteDB = this.getReadableDatabase();
return sqliteDB.rawQuery(MY_QUERY, null);
}
该 Google Dev 页面上的“教程”部分指出:
例如,如果您要创建人员姓名和电话号码的列表,您可以执行一个查询,该查询返回一个 Cursor,其中包含每个人的行和姓名和号码的列。然后,您创建一个字符串数组,指定您希望在布局中为每个结果使用 Cursor 中的哪些列,并创建一个整数数组,指定每列应放置的相应视图
然后有这个代码:
String[] fromColumns = {ContactsContract.Data.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER};
int[] toViews = {R.id.display_name, R.id.phone_number};
所以,在我的 MainActivity.java 中,我创建了一个 DatabaseHelper 的新实例,并获得了一个光标:
DatabaseHelper myDBHelper = new DatabaseHelper(this);
Cursor myDataCursor = myDBHelper.getDataCursor();
我不知道的是,谷歌上面的 sn-p 中的“ContactsContract”是什么?我认为这可能是他们的光标,但我的光标没有可用的“数据”或“CommonDataKinds”方法。我浏览了 Google 的 API 指南页面,看看他们在哪里定义了这些方法,但似乎找不到它们。我也不知道他们在同一个例子中从哪里得到“R.layout.person_name_and_number”。
感谢您抽出宝贵时间阅读。
编辑:
我已将此代码添加到我的 MainActivity.java 代码中:
DatabaseHelper myDBHelper = new DatabaseHelper(this);
Cursor myDataCursor = myDBHelper.getDataCursor();
String[] fromColumns = {"_id", "columnA","columnB","...","columnN"};
int[] toViews = {R.id.id_textview, R.id.columnA_textview, R.id.columnB_textview, ... , R.id.columnN_textview};
SimpleCursorAdapter sca = new SimpleCursorAdapter(this, R.layout.my_new_layout, myDataCursor, fromColumns, toViews, 0);
ListView myListView = (ListView) findViewById(R.id.row_of_data);
myListView.setAdapter(sca);
我创建了一个名为 my_new_layout.xml 的新视图:
<ListView android:id="@+id/row_of_data">
<TextView android:id="@+id/id_textview" />
<TextView android:id="@+id/columnA_textview" />
<TextView android:id="@+id/columnB_textview" />
...
<TextView android:id="@+id/columnN_textview" />
</ListView>
然后我将新视图添加到 activity_main.xml
<include layout="@layout/"my_new_layout />
但是,现在当我尝试运行应用程序时,我得到了错误:
java.lang.unsupportedoperationexception addview(view, layoutparams) is not supported in adapterview
我得到了这个错误,奇怪的是,我将我的新布局包含在 activity_main.xml 中。
【问题讨论】:
-
我猜在他们的示例中,他们正在从设备联系人中提取数据。
-
啊,所以这不是数据库查询,他们说“您可以执行返回光标的查询”?如果没有,您能否为我推荐一个更好的地方来查找有关如何实现我的目标的信息?
-
您可以使用
rawQuery()填充光标(它允许您编写类似“SELECT [column list] FROM aTable WHERE [condition list]”的内容)
标签: android android-sqlite android-adapter android-gridview android-cursor