Как проверить значения из запроса с использованием DAO - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть это приложение, в котором есть стартовое руководство, и я сохраняю в базе данных комнаты, если пользователь уже видел учебник.Для этого я сохраняю данные, когда пользователь заканчивает учебное пособие, и делаю запрос в onCreateMethod объекта TutorialActivity, чтобы посмотреть, пропущу ли я другое действие.Мой DAO как два метода, один для вставки, а другой для загрузки.Мой метод загрузки (о чем я хочу спросить) имеет следующий код:

@Query("SELECT * FROM tutorial LIMIT 1")
    fun load(): Single<TutorialEntity>

@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(userEntity: TutorialEntity): Single<Long>

Моя сущность:

@Entity(tableName = "tutorial")
class TutorialEntity (

    @PrimaryKey
    @ColumnInfo(name = "as_seen_tutorial")
    val asSeenTutorial: Long

)

Это моя учебная деятельность:

Примечание:Я использую кинжал для ввода tutorialDao (здесь не важно)

//here is where I check if the value is already 1 to skip
    onCreate(){
    val load = tutorialDao.load()
    if(load.? contains 1) -> This is my doubt {      
      //OBJECTIVE: does not show and skips to other activity   
   } 
 }

//here is where I insert the flag into the database
fun showTutorial(){
  val entity = TutorialEntity(1)
  tutorialDao.insert(entity)
}

Я хотел знать, как я могу проверить, является ли значение, полученное в запросе выбора, одним

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Хотя вы можете сделать это с помощью Room, рекомендуется не использовать Room для таких операций.Такие проверки отдельных значений выполняются с использованием SharedPreferenceЦитируется Google Документация

Если у вас относительно небольшая коллекция значений ключей, которые вы хотите сохранить, вам следует использовать API SharedPreferences.

С помощью Room вы должны создать @Entity, @Dao, вызвать их в background thread .которые так много работают

Вот как вы делаете это с SharedPreference

val sharedPref = activity?.getSharedPreferences("AppPreference", Context.MODE_PRIVATE)

И вы проверяете это, как показано ниже

if (sharedPref.getBoolean("as_seen_tutorial", false)){
    // show tutorial. 
    // false is a default value
}
else{
    // start another activity
}

И после показа вашего урокаВы сохраняете "as_seen_tutorial" как true, как показано ниже

with (sharedPref.edit()) {
    putBoolean("as_seen_tutorial", true)
    commit()
}
0 голосов
/ 14 ноября 2018

Хорошо. Я не знаю, правильно ли я вас понимаю, но у меня было несколько вопросов, прежде чем ответить на ваши сомнения.

Почему вы используете Single? (Вы собираетесь получить NPE) (https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/single.html)

Я рекомендую вам использовать только класс как nullable, поэтому просто проверьте вашу переменную на

if (load?.asSeenTutorial == 1) {
   // Do your stuff
}

И помните, что вам нужно выполнить операцию вставки под AsyncTask.

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