Android Комната, что вернет Query, если нет подходящей строки? - PullRequest
1 голос
/ 04 марта 2020
@Dao
interface  ExampleDao {
    @Query("SELECT * FROM example_table WEHRE id = :id")
    fun getExample(id: Int): LiveData<Example>
}

Что возвращает вышеуказанный запрос, если в базе данных нет совпадающего идентификатора? Я предполагаю, что это не могло быть нулем, потому что возвращаемый тип не обнуляемый.

И возвращает ли запрос пустое значение, если возвращаемый тип обнуляемый? как LiveData<Example>? или LiveData<Example?>

1 Ответ

0 голосов
/ 04 марта 2020

Я думаю, у вас есть liveData объект, но liveData.value дает вам ноль.

, и если у вас есть наблюдатель, он получит null независимо от того, LiveData<Example> или LiveData<Example?>

для более подробной информации, вы можете увидеть yourDao_impl.java, который генерирует Комната для вас.

и обратите внимание на то, что: он не обязательно будет ненулевым

  @Override
  public LiveData<Experiment> queryLiveData(final String profileId) {
    final String _sql = "SELECT * FROM experiment WHERE profileId= ?";
    return __db.getInvalidationTracker().createLiveData(new String[]{"experiment"}, false, new Callable<Experiment>() {
      @Override
      public Experiment call() throws Exception {
          ...
          final Experiment _result;
          if(_cursor.moveToFirst()) {
            _result = new Experiment();
            final String _tmpProfileId;
            _tmpProfileId = _cursor.getString(_cursorIndexOfProfileId);
          } else {
            _result = null;
          }
          return _result;
        } finally {
          _cursor.close();
        }
      }

и не используйте LiveData<Example>?, кажется, это не помогает, но дает вам NPE.

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