Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有多表SQLite数据库的空白ListView_Sqlite_Listview_Android Layout - Fatal编程技术网

带有多表SQLite数据库的空白ListView

带有多表SQLite数据库的空白ListView,sqlite,listview,android-layout,Sqlite,Listview,Android Layout,我试图用关系数据库中的数据填充ListView。我试图做到的是显示护士表中的每位护士,以及分配给该护士的房间号。我得到的结果是显示两个按钮的布局和一个空的ListView 创建数据库的代码是: public void onCreate(SQLiteDatabase db) { // create NURSE_TABLE db.execSQL("CREATE TABLE " + NURSE_TABLE + " (" + KEY_NURSE_ROWID + " INTEGER PRI

我试图用关系数据库中的数据填充ListView。我试图做到的是显示护士表中的每位护士,以及分配给该护士的房间号。我得到的结果是显示两个按钮的布局和一个空的ListView

创建数据库的代码是:

public void onCreate(SQLiteDatabase db) {
// create NURSE_TABLE
db.execSQL("CREATE TABLE " + NURSE_TABLE + " (" + KEY_NURSE_ROWID
        + " INTEGER PRIMARY KEY AUTOINCREMENT, " +          KEY_LNAME
        + " TEXT NOT NULL, " + KEY_FNAME + " TEXT NOT NULL, "
        + KEY_MI + " TEXT, " + KEY_EMAIL + " TEXT NOT NULL, "
        + KEY_PHONE_PRIMARY + " TEXT NOT NULL, "
        + KEY_PHONE_SECONDARY + " TEXT, " + KEY_FTE
        + " TEXT NOT NULL, " + KEY_DUTY_STATUS + " TEXT NOT NULL);");

// create ROOM_TABLE
db.execSQL("CREATE TABLE " + ROOM_TABLE + " (" + KEY_ROOM_ROWID
        + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_TYPE_PATIENT
        + " TEXT, " + KEY_OCCUPIED + " TEXT NOT NULL, "
        + KEY_ROOM_NUMBER + " TEXT NOT NULL, "
        + KEY_ASSIGNED_NURSE + " INTEGER, " 
        + " FOREIGN KEY (" + KEY_ASSIGNED_NURSE + ") REFERENCES " 
        + NURSE_TABLE + " (" + KEY_NURSE_ROWID + "));");
    } // onCreate
该活动的代码为:

public void displayNurseRoster(){

    ListView listView = (ListView) findViewById(R.id.list);

    // int variables filled with NURSE_TABLE data
    int[] to_nurseTable = new int[] {

            // int list for data from NURSE_TABLE fields
            R.id.rosterDutyStatus,
            R.id.rosterListLname, 
            R.id.rosterListFname, 
            R.id.rosterListMI, 
            R.id.rosterListID,

            // int list for data from ROOM_ROWID fields
            R.id.firstAssignment,
            R.id.secondAssignment,
            R.id.thirdAssignment,
            R.id.fourthAssignment,
            R.id.fifthAssignment,
            R.id.sixthAssignment };

    // String array holding data fields from NURSE_TABLE 
    String[] from_nurseTable = new String [] {

            // fields from NURSE_TABLE
            DbCommunicator.KEY_DUTY_STATUS,
            DbCommunicator.KEY_LNAME, 
            DbCommunicator.KEY_FNAME, 
            DbCommunicator.KEY_MI,
            DbCommunicator.KEY_NURSE_ROWID,
            DbCommunicator.KEY_ROOM_NUMBER}; 

    // instantiate instance of DbCommunicator object
    rosterView = new DbCommunicator(this);

    // open instance
    rosterView.open();

    // get & manage cursor for NURSE_TABLE data
    Cursor nurseTableCursor = rosterView.getNurseRosterCursor(this);
    startManagingCursor(nurseTableCursor);

    // instantiate cursor adaptor
    ListAdapter nurseTableAdapter = new SimpleCursorAdapter(this,
    R.layout.nurse_list, nurseTableCursor, from_nurseTable, to_nurseTable);

    nurseTableCursor.moveToNext();

    // set adapter to listView
    listView.setAdapter(nurseTableAdapter);
}// displayNurseRoster()
生成光标的代码如下所示:

public Cursor getNurseRosterCursor (Context context) {

    SQLiteQueryBuilder nurseQueryBuilder = new SQLiteQueryBuilder();
    nurseQueryBuilder.setTables("NURSE_TABLE, ROOM_TABLE"); 

    String[] returnedColumns = new String[] {
            "Nurse_Table._id", 
            "Nurse_Table._dutyStatus",
            "Nurse_Table._lName",
            "Nurse_Table._FName",
            "Nurse_Table._mi",
            "Room_Table._id",
            "Room_Table._roomNumber"};

    Cursor nurseCursor = nurseQueryBuilder.query(sqldb, returnedColumns,
            null, null, null, null, null);

    return nurseCursor;
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#81BEF7"
android:orientation="vertical" >

<Button
    android:id="@+id/btnAddNurseToRoster"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/add" 
    android:focusable="true"/>

<Button
    android:id="@+id/btnRemoveNurseFromRoster"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignTop="@+id/btnAddNurseToRoster"
    android:layout_toRightOf="@+id/btnAddNurseToRoster"
    android:text="@string/delete" 
    android:focusable="true"/>

<ListView
    android:id="@+id/list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_below="@+id/btnAddNurseToRoster"
    android:textColor="#FFFFFF"
    android:textStyle="bold"/>

</RelativeLayout>
最后,我的布局如下所示:

public Cursor getNurseRosterCursor (Context context) {

    SQLiteQueryBuilder nurseQueryBuilder = new SQLiteQueryBuilder();
    nurseQueryBuilder.setTables("NURSE_TABLE, ROOM_TABLE"); 

    String[] returnedColumns = new String[] {
            "Nurse_Table._id", 
            "Nurse_Table._dutyStatus",
            "Nurse_Table._lName",
            "Nurse_Table._FName",
            "Nurse_Table._mi",
            "Room_Table._id",
            "Room_Table._roomNumber"};

    Cursor nurseCursor = nurseQueryBuilder.query(sqldb, returnedColumns,
            null, null, null, null, null);

    return nurseCursor;
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#81BEF7"
android:orientation="vertical" >

<Button
    android:id="@+id/btnAddNurseToRoster"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/add" 
    android:focusable="true"/>

<Button
    android:id="@+id/btnRemoveNurseFromRoster"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignTop="@+id/btnAddNurseToRoster"
    android:layout_toRightOf="@+id/btnAddNurseToRoster"
    android:text="@string/delete" 
    android:focusable="true"/>

<ListView
    android:id="@+id/list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_below="@+id/btnAddNurseToRoster"
    android:textColor="#FFFFFF"
    android:textStyle="bold"/>

</RelativeLayout>

最初开始时,我只是用护士表中的数据填充ListView,这很有效,但自从我开始尝试让这两个表一起工作以来,我经历了一段很长的时间


非常感谢您的任何帮助/指导。

您的
setTables()
调用中的两个表没有正确连接

从\u nurseTable到\u nurseTable的
数组不匹配

您没有提到要在列表视图中显示的内容,但我猜可能与此查询的结果类似:

SELECT nurse_table._id,_dutyStatus,_lName,_FName,_mi,group_concat(_roomNumber)
  FROM nurse_table LEFT JOIN room_table ON nurse_table._id = _assignedNurse
  GROUP BY nurse_table._id
  ORDER BY _lName,_FName /* or whatever */


当您不知道如何构造SQL查询时,在桌面上的数据库副本中测试查询通常更有帮助。(有许多SQLite管理工具,或者上一次使用SQLite(.exe)命令行工具。)

您到底有什么问题?布局在顶部有两个按钮,但listview完全为空。我看不到日志上有任何错误。请将此信息放到问题中。我试图显示的内容如下:值班Johnson Robin R(下一行)任务:Rm 1 Rm 2但我正在努力解决如何显示这一点,因为每个护士之间的房间数可能会发生变化。感谢您的回复,我正在研究如何正确地加入表。您的
returnedColumns[]
有一个“\u id”字段,因此我假设这是
KEY\u NURSE\u ROWID
的值。如果没有左会合,没有房间的护士就不会出现(这可能不是你想要的)。如果不使用聚合函数.nurseQueryBuilder.setTables(“Nurse_Table JOIN Room_Table ON Room_Table.Nurse_id=Nurse_Table._id”);这个代码似乎在工作,我遇到的问题是,如果没有为护士分配房间号(护士id字段为空)。我试图做的是1)显示所有进入护士表的护士,2)房间表中护士id字段与护士表匹配的任何行。我敢肯定的是,由于启动时桌上没有房间,所以一切都是空白的。