#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