Как я могу заставить поток ждать между 2 методами - PullRequest
0 голосов
/ 17 марта 2019

У меня есть эта функция - вставка данных в базу данных Room в приложении для Android:

public void insertInfoToDB () {

final Thread thread = new Thread(new Runnable() {
    @Override
    public void run() {

            int medId = db.medicationsDao().getMedicationIdByName(medName);

            //insert data to medications table
            MedicationsTable medication = new MedicationsTable(medId, medName, amountDosageMg, remindersAmountPerDay);
            db.medicationsDao().insert(medication);

            //insert data to reminders table
            RemindersTable reminder;
            for (int i = 0; i < selectedDaysSet.size(); i++) {
                for (int j = 0; j < allReminderTimes.size(); j++) {
                    reminder = new RemindersTable(allReminderTimes.get(j).getHour(),
                            allReminderTimes.get(j).getMinutes(), allReminderTimes.get(j).getDoses()
                            , selectedDaysSet.get(i), medication.getId());
                    db.medicationsDao().insertReminder(reminder);

                    createNotification(reminder.getId(), allReminderTimes.get(j).getHour(),
                            allReminderTimes.get(j).getMinutes(), allReminderTimes.get(j).getDoses(),
                            selectedDaysSet.get(i));
                }
            }

Пока данные вставляются в дб, первичный ключ (autoGenerated) id равен 0, и мне нужно сделать что-то с ключом сразу после.Поэтому мне нужно "держать" или что-то между "db.medicationsDao (). InsertReminder (напоминание);"и «createNotification» (вызывается сразу после), чтобы поток завершил вставку в базу данных, прежде чем я вызову createNotification.Спасибо за помощь!

1 Ответ

0 голосов
/ 17 марта 2019

Вы можете использовать CountDownTimer class:

long waitingTime = 5000; //in milli second
long countDownInteval = 2000;
    CountDownTimer countDownTimer = new CountDownTimer(waitingTime, countDownInterval) {
        @Override
        public void onTick(long millisUntilFinished) {

        }

        @Override
        public void onFinish() {
            //Write your code here
        }
    };
    countDownTimer.start();

В этом коде,

  • вызовет метод onTick (долгое время осталось)через каждые 2 секунды
  • метод onFinish () будет вызываться через 5 секунд

Документ: CountDownTimer

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...