我在onCreate()中有这段代码:
try{
Log.i("onCreate","Trying to open database...");
orgi = this.openOrCreateDatabase("orgi", MODE_PRIVATE, null);
Log.i("onCreate","database opened.");
cursor = orgi.rawQuery("SELECT name from profile;",null);
Log.i("onCreate","successfully done with query..");
adapter = new SimpleCursorAdapter(this,R.layout.profilelistrow,cursor,
new String[]{"name"},new int[] {R.id.profileListRowTV1});
Log.i("onCreate","Adapter done");
ll.setAdapter(adapter);
}catch (SQLException e){
displayError(e.toString());
}
我应该使用SQLite数据库中的数据填充customlistview。但是它给了我一条紧靠这条线的力量:
adapter = new SimpleCursorAdapter(this,R.layout.profilelistrow,cursor,
new String[]{"name"},new int[] {R.id.profileListRowTV1});
有人可以告诉我出了什么问题吗?我对简单的光标适配器非常无知(由于我在Android中的noobness)... R.layout.profilelistrow是我整个屏幕的布局,而profileListRowTV1是将插入“name”的textview。请教我这个...我做错了什么?
答案 0 :(得分:1)
我不知道是什么问题,因为你给了我们代码而没有错误,在eclipse中 - >窗口 - >开放视角 - > DDMS。当你的力量关闭时,看看日志猫。怎么样。这是我朋友的一个例子。
主要列表XML ...您可以在布局中的任何位置添加列表视图...
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:background="#FFFFD0"
android:layout_height="fill_parent"
android:orientation="vertical">
<ListView
android:id="@android:id/list"
android:cacheColorHint="#666666"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<TextView android:id="@android:id/empty"
android:layout_width="wrap_content"
android:textColor="#4B89E0"
android:layout_height="wrap_content"
android:text="The list is empty! Do I need this? No idea!"
/>
</LinearLayout>
接下来的行: 现在这些变得非常复杂。我有一个程序,列表有5个图像和3个文本视图,android似乎很好地处理它。但这里有一个基本的,3个文本视图......也可以同时使用。
<?xml version="1.0" encoding="utf-8"?>
<!-- row.xml -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:paddingTop="4dip"
android:textAppearance="?android:attr/textAppearanceLarge"
android:paddingBottom="6dip"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView android:id="@+id/text1"
android:textColor="#4B89E0"
android:layout_width="130dip"
android:layout_height="40dip"
android:textSize = "15dip"
/>
<TextView android:id="@+id/text2"
android:textColor="#4B89E0"
android:layout_width="70dip"
android:gravity = "center"
android:textStyle = "bold"
android:layout_height="wrap_content" />
<TextView android:id="@+id/text3"
android:textColor="#4B89E0"
android:gravity = "center"
android:layout_width="80dip"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
最后将一些代码放在一起......在这个例子中调用fillData();填写清单。我通常喜欢这样做,以便当我更改数据库时,我正在检索哪些信息(即我想看到:所有形状或圆形或方形),列表很容易更新。我假设您的数据库已经打开。你在OnCreate()中打开它。 而不是在OnCreate方法中使用所有这些代码创建自己的方法“fillData”,而您在OnCreate中必须拥有的只是 fillData(); 。这样可以更轻松地查看,编辑和排除故障。
private void fillData() {
Cursor fetchInfo = mDbHelper.fetchAllRecords();
startManagingCursor(fetchInfo);
// Create an array to specify the fields we want to display in the list (TITLE,DATE,NUMBER)
String[] from = new String[]{DbAdapter.KEY_TITLE,
DbAdapter.KEY_DATE, DbAdapter.KEY_AUTHOR };
// an array of the views that we want to bind those fields to (in this case text1,text2,text3)
int[] to = new int[]{R.id.text1, R.id.text2, R.id.text3};
// Now create a simple cursor adapter and set it to display
SimpleCursorAdapter notes =
new SimpleCursorAdapter(this, R.layout.list_row, fetchInfo, from, to);
setListAdapter(notes);
}
WakaWaka
好运
答案 1 :(得分:0)
你的问题应该在这一行。
cursor = orgi.rawQuery("SELECT name from profile;",null);
SimpleCursorAdapter以及许多Android功能依赖于具有名为“_id”的标识符键。因此,请确保您的查询返回带有该标识符的行。在您的情况下,您应该将该行更改为此
cursor = orgi.rawQuery("SELECT yourTableId AS '_id', name FROM profile;",null);
这应该可以解决你的问题。