Как получить данные из разных таблиц SQLite и отобразить их в одном SimpleAdapter Android - PullRequest
0 голосов
/ 17 февраля 2020

Я новичок в Android и мне нужно отобразить время начала, время окончания и имя в виде списка. Для отображения я использую SimpleAdapter. Проблема в том, что у меня есть две таблицы SQLite:

Время таблицы: Время начала | Время остановки | Студенческий билет

Стол ученика: Студенческий билет | Имя студента

Сейчас я использую Курсор , чтобы получить Starttime, Stoptime и Student ID из моей базы данных

 Cursor curm1 = myDb.getAllMonday();
 while (curm1.moveToNext()) {
        final HashMap<String, String> resultMapMonday = new HashMap<>();
        resultMapMonday.put("Start", curm1.getString(3));
        resultMapMonday.put("Stop", curm1.getString(4));
        resultMapMonday.put("Student", curm1.getString(5));
        arrayListStudentsName.add(curm1.getString(5));
        listItemsMo.add(resultMapMonday);
 }

, а затем SimpleAdapter для его отображения:

final SimpleAdapter adaptersimpleMo = new SimpleAdapter(this, listItemsMo, R.layout.timeslots_configurate,
            new String[]{"Start", "Stop", "Student"},
            new int[]{R.id.oneTime_start, R.id.oneTime_stop, R.id.selectedStudent});

Но вместо идентификатора я хочу отобразить имена, которые хранятся в другой таблице. Я могу получить совпадающие имена идентификаторов с помощью другого курсора

Cursor curm2 = myDb.getNamesbyIDs(arrayListStudentsName);
while (curm2.moveToNext()) {
        final HashMap<String, String> resultMapNames = new HashMap<>();
        resultMapNames.put("Name", curm2.getString(1));
}

Но я не знаю, как получить имена в том же адаптере, чтобы отображать имена в том же элементе списка, что и соответствующий старт & остановить время.

РЕДАКТИРОВАТЬ

  public Cursor getAllMonday() {
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor res = db.rawQuery("SELECT * FROM " + TABLE_TIME + " WHERE day = 'Montag' ORDER BY CAST(start as unsigned)", null);
    return res;
}

1 Ответ

1 голос
/ 17 февраля 2020

Измените getAllMonday(), чтобы использовать запрос, объединяющий 2 таблицы:

public Cursor getAllMonday() {
    SQLiteDatabase db = this.getWritableDatabase();
    String sql = "SELECT t.Start, t.Stop, s.Studentname FROM " + TABLE_TIME + " AS t INNER JOIN " + TABLE_STUDENT + 
                 " AS s ON s.StudentID = t.StudentID WHERE t.day = 'Montag' ORDER BY CAST(t.start as unsigned)"
    Cursor res = db.rawQuery(sql, null);
    return res;
}

Измените переменную таблицы TABLE_STUDENT и имена столбцов, которые я использовал, на действительные. Теперь курсор содержит имя студента, а не его идентификатор. Затем измените код на:

Cursor curm1 = myDb.getAllMonday();
while (curm1.moveToNext()) {
    final HashMap<String, String> resultMapMonday = new HashMap<>();
    resultMapMonday.put("Start", curm1.getString(curm1.getColumnIndex("Start")));
    resultMapMonday.put("Stop", curm1.getString(curm1.getColumnIndex("Stop")));
    resultMapMonday.put("Student", curm1.getString(curm1.getColumnIndex("Studentname")));
    arrayListStudentsName.add(curm1.getString(curm1.getColumnIndex("Studentname")));
    listItemsMo.add(resultMapMonday);
}
curm1.close();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...