Возвращаемый тип функции запроса в базе данных Android Room?

#android-room

#android-room

Вопрос:

У меня простой вопрос, но я просто нигде не могу найти никакой документации.

Предположим, у нас есть приведенный ниже пример, который можно найти здесь .

 @Dao
public interface UserDao {
    @Query("SELECT * FROM User WHERE userId = :id")
    public User getById(int id);
}
  

Я заметил, что возвращаемый тип функции равен User , но что произойдет, если запрос не вернет результат? (т. Е. В таблице нет пользователя с указанным идентификатором)

Будет ли функция просто возвращаться null ?

Кроме того, если бы это была функция Kotlin, должна ли подпись быть следующей с типом nullable User?

 @Query("SELECT * FROM User WHERE userId = :id")
fun getById(int id): User?
  

Ответ №1:

Когда документации недостаточно, может помочь чтение источников.

Что бы вы ни использовали (Java или Kotlin) для описания интерфейса Dao — реализация класса Dao на Java (сгенерированная Room under the hood) будет такой же:

 public User getById(int id) {
   ...
   final Cursor _cursor = DBUtil.query(__db, "SELECT * FROM User ...", false, null);
   .....
   if(_cursor.moveToFirst()) { 
       // If there is at least one record
          _result = new User(<...User's fields gotten from query...>);    
       } else {
       // If there is no record 
          _result = null;  // <---- here it is!  
       }
   return _resu<
...
}
  

Кроме того, если бы это была функция Kotlin, должна ли подпись быть следующей с типом User с нулевым значением?

Технически вы могли бы опустить ? , но это может ввести в заблуждение при чтении кода, поэтому лучше использовать User? явно.

Комментарии:

1. Спасибо! Если бы только у Google были ресурсы для написания наполовину приличной документации smh