AsyncTask
будет выполняться в отдельном потоке. Ваш код выполнит AsyncTask и немедленно перейдет к циклу for
независимо от того, завершил ли AsyncTask свое выполнение или нет. Я упомяну несколько способов, как вы можете справиться с этим.
Метод 1: Вы можете переместить цикл for
внутри самой AsyncTask. Это обеспечит выполнение цикла for после выборки данных из базы данных.
Метод 2: Разрешить выполнение этого запроса в потоке пользовательского интерфейса. AFAIK, Room позволяет выполнять запросы в потоке пользовательского интерфейса, если это явно указано.
Метод 3: Использовать обратный вызов. После завершения AsyncTask вы можете использовать обратный вызов (реализованный с использованием интерфейса), который сообщит вашему действию / фрагменту, что AsyncTask завершен, и вы можете продолжить работу.