我用Google搜索并搜索了这个网站以获得答案,但什么也没得到; / 所以,这是我的问题,我有listview,我尝试填充数据库中的数据,但列表显示什么。我真的坚持这个,这是我的代码:
DatabaseViewerActivity.java:
protected void onCreate(Bundle savedInstaceState)
{
super.onCreate(savedInstaceState);
setContentView(R.layout.database_layout);
SQLiteDatabase database = openOrCreateDatabase("qr_scanner.db",SQLiteDatabase.CREATE_IF_NECESSARY,null);
String q = "SELECT id as _id,serial,desc FROM inv_urzadzenia;";
Cursor c = database.rawQuery(q, null);
startManagingCursor(c);
ListAdapter adapter = new SimpleCursorAdapter(this,R.layout.single_row_item,c,new String[]{"serial","desc"},new int[]{R.id.deviceSerial,R.id.deviceDesc});
ListView lv = (ListView)findViewById(R.id.deviceList);
lv.setAdapter(adapter);
lv.setVisibility(View.VISIBLE);
c.close();
database.close();
}
这是我的single_row_item.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayoutHeader"
android:layout_height="wrap_content" android:layout_width="fill_parent">
<TextView
android:id="@+id/deviceSerial"
android:layout_width="wrap_content"
android:layout_height="?android:attr/listPreferredItemHeight" android:layout_alignParentLeft="true"></TextView>
<TextView
android:id="@+id/deviceDesc"
android:layout_width="wrap_content"
android:layout_height="?android:attr/listPreferredItemHeight" android:layout_alignParentRight="true"></TextView>
</RelativeLayout>
和database_layout.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="11pt"
android:text="Urzadzenia"/>
<RelativeLayout
android:id="@+id/RelativeLayoutHeader"
android:layout_height="wrap_content" android:layout_width="fill_parent">
<TextView
android:id="@+id/TextView01"
android:layout_width="wrap_content"
android:layout_height="?android:attr/listPreferredItemHeight"
android:textColor="#f00"
android:text="String" android:layout_alignParentLeft="true" ></TextView>
<TextView
android:id="@+id/TextView01"
android:layout_width="wrap_content"
android:layout_height="?android:attr/listPreferredItemHeight"
android:textColor="#f00"
android:text="String" android:layout_alignParentRight="true"></TextView>
</RelativeLayout>
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/deviceList" android:divider="#000" android:isScrollContainer="true" android:headerDividersEnabled="true" android:scrollbarAlwaysDrawVerticalTrack="true" android:scrollbars="vertical"/>
</LinearLayout>
我不知道问题出在哪里,我检查过c.getCount()和adapter.getCount()不返回0,
我的LogCat:
09-20 07:23:43.574: W/KeyCharacterMap(8915): No keyboard for id 0 09-20 07:23:43.574: W/KeyCharacterMap(8915): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
09-20 07:28:37.994: W/ActivityManager(67): Activity pause timeout for HistoryRecord{43fd4b50 com.android.launcher/com.android.launcher2.Launcher}
当我从statemet
中删除“AS _id”时我得到的异常09-20 07:32:36.644: E/AndroidRuntime(16725): java.lang.RuntimeException: Unable to start activity ComponentInfo{projects.qrscanner/projects.qrscanner.DatabaseViewerActivity}: java.lang.IllegalArgumentException: column '_id' does not exist
答案 0 :(得分:1)
由于您使用的是startManagingCursor()
,因此您可以删除代码
c.close();
database.close();
因为android框架将关闭活动时关闭游标和数据库。
线条
c.close();
database.close();
在你的代码中创建麻烦你是从这个游标创建一个适配器对象,你最终强行关闭,因此适配器支持的数据集失效,因此你看不到任何结果。
以下是可以帮助它的样本。
SQLiteDatabase database = openOrCreateDatabase("testdb.db",
SQLiteDatabase.CREATE_IF_NECESSARY, null);
String createTable = "CREATE TABLE IF NOT EXISTS " + "testtable" + "(" + "_id"
+ " integer primary key autoincrement, " + "serial1"
+ " text not null, " + "desc1" + " text not null, "
+ "id text);";
String q = "SELECT id as _id,serial1,desc1 FROM testtable;";
database.execSQL(createTable);
for (int i = 0; i < 20; i++) {
String serial = "serial - "+i;
String desc = "desc - "+i;
String id = "id - "+i;
String sql =
"INSERT or replace INTO testtable (serial1, desc1, id) VALUES('"+serial+"'"+",'"+desc+"'"+",'"+id+"')" ;
database.execSQL(sql);
}
Cursor c = database.rawQuery(q, null);
startManagingCursor(c);
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.single_row_item_layout, c, new String[] { "serial1",
"desc1" }, new int[] { R.id.deviceSerial,
R.id.deviceDesc });
ListView lv = (ListView) findViewById(R.id.deviceList);
lv.setAdapter(adapter);
adapter.notifyDataSetChanged();
lv.setVisibility(View.VISIBLE);