Взяв код и запустив его с помощью (без LiveData и преобразователей типов (вместо типов даты и времени используется строка)): -
emailsDatabase = Room.databaseBuilder(this,EmailsDatabase.class,"emailsdb")
.allowMainThreadQueries()
.build();
ContactEntity c1 = new ContactEntity("email1","password","Fred");
c1.setEmailTo("email1");
ContactEntity c2 = new ContactEntity("email2","password","Mary");
c2.setEmailTo("email2");
ContactEntity c3 = new ContactEntity("email3","password","Jane");
c3.setEmailTo("email3");
emailsDatabase.contactsDao().insert(c1);
emailsDatabase.contactsDao().insert(c2);
emailsDatabase.contactsDao().insert(c3);
emailsDatabase.emailsDao().insert(
new EmailEntity(
"email1",
"email2",
"Blah",
"2019-12-31",
"10:30","filex",
false,
"This")
);
emailsDatabase.emailsDao().insert(
new EmailEntity(
"email1",
"email3",
"Blah",
"2019-12-31",
"10:30","filex",
false,
"This")
);
emailsDatabase.emailsDao().insert(
new EmailEntity(
"email2",
"email1",
"Blah",
"2019-12-31",
"10:30","filex",
false,
"This")
);
emailsDatabase.emailsDao().insert(
new EmailEntity(
"email1",
"email2",
"Blah",
"2019-12-31",
"10:40","filex",
false,
"This")
);
List<EmailEntity> emailEntityList = emailsDatabase.emailsDao().getAllEmails();
for (EmailEntity e: emailEntityList) {
logEmail(e);
}
List<ContactEntity> contactEntityList = emailsDatabase.contactsDao().getAllContacts();
for (ContactEntity c: contactEntityList) {
logContact(c);
}
List<ContactWithEmailCounts> contactWithEmailCountsList = emailsDatabase.contactsDao().testit();
for (ContactWithEmailCounts cwec: contactWithEmailCountsList) {
Log.d("CWECINFO","Email Count = " + cwec.emailcount);
}
}
private void logEmail(EmailEntity e) {
Log.d("EMAIlINFO","Email From = " + e.getEmailFrom() + "Email To " + e.getEmailTo() + "Email Token = " + e.getEmailToken());
}
private void logContact(ContactEntity c) {
Log.d("CONTACTINFO","Name = " + c.getContactName() + " Email = " + c.getEmailToken());
}
Вместе с классом: -
public class ContactWithEmailCounts {
@Embedded
ContactEntity contactEntity;
int emailcount;
}
Запрос, добавляемый в ContactsDao как (т. Е. Без изменений, кроме метода, который был вызван, который был добавлен): -
@Query("SELECT e.emails_count AS emailcount, c.* " +
"FROM contacts_table c " +
"INNER JOIN ( " +
" SELECT email_to, COUNT(email_to) emails_count " +
" FROM emails_table " +
" GROUP BY email_to) e " +
"ON e.email_to = c.email_to")
List<ContactWithEmailCounts> testit();
Затем я получаю следующие результаты (то есть @Query работает, а не дает сбой ): -
2020-01-11 20:36:37.439 D/EMAIlINFO: Email From = email1Email To email2Email Token = null
2020-01-11 20:36:37.439 D/EMAIlINFO: Email From = email1Email To email3Email Token = null
2020-01-11 20:36:37.439 D/EMAIlINFO: Email From = email2Email To email1Email Token = null
2020-01-11 20:36:37.439 D/EMAIlINFO: Email From = email1Email To email2Email Token = null
2020-01-11 20:36:37.440 D/CONTACTINFO: Name = Fred Email = email1
2020-01-11 20:36:37.441 D/CONTACTINFO: Name = Mary Email = email2
2020-01-11 20:36:37.441 D/CONTACTINFO: Name = Jane Email = email3
2020-01-11 20:36:37.442 D/CWECINFO: Email Count = 1
2020-01-11 20:36:37.442 D/CWECINFO: Email Count = 2
2020-01-11 20:36:37.442 D/CWECINFO: Email Count = 1
Таким образом, я подозреваю, что таблица, которая не была найдена, - это именно то, что есть, то есть по какой-то причине таблица не существует, возможно, именно так, как вы выполняете тест .