Size: a a a

Android arch. components

2018 July 04

Sergey λ in Android arch. components
Dmitry Repin
сущность:
@Entity(tableName = "toDoTasks", foreignKeys = [(ForeignKey(entity = Project::class, parentColumns = ["id"], childColumns = ["projectId"]))])
data class ToDoTask (@PrimaryKey(autoGenerate = true) var id: Long = 0,
                    @ColumnInfo(name = "title") var title: String,
                    @ColumnInfo(name = "isDone") var isDone: Boolean,
                    @ColumnInfo(name = "projectId") var projectId: Long)

DAO:
   @Query("SELECT * FROM toDoTasks WHERE projectId=:projectId")
   fun loadTasksByProject(projectId: Long) : LiveData<List<ToDoTask>>

Репозиторий:
   fun getTasks(projectId: Long): LiveData<List<ToDoTask>> {
       return GetTaskAsyncTask(tasksDao).execute(projectId).get()
   }

   private class GetTaskAsyncTask(val dao: TasksDao) : AsyncTask<Long, Void, LiveData<List<ToDoTask>>>() {
       override fun doInBackground(vararg id: Long?): LiveData<List<ToDoTask>> {
           val saveId = id[0] ?: throw NullPointerException("Project id should not be null")
           return dao.loadTasksByProject(saveId)
       }

   }

Вью модель:
private val repository: Repository = Repository(application)
   private var projects: LiveData<List<Project>> = repository.getProjects()
   var selectedProjectId: Long = 1
   private var tasks: LiveData<List<ToDoTask>> = repository.getTasks(selectedProjectId)
   fun getProjects() = projects
   fun getTasks() = tasks

И, наконец, сам обсерв в OnCreateView фрагмента: :)
       mainViewModel.getTasks().observe(this, Observer<List<ToDoTask>> { tasks ->
           val saveTasks = tasks ?: NullPointerException("Tasks should not be null")
           viewAdapter.updateTasks(saveTasks as List<ToDoTask>)
       })

projectId меняется так:
   override fun onProjectSelected(id: Long) {
       tasksFragment = TasksFragment.newInstance(id)
       mainViewModel.selectedProjectId = id
       replaceFragment(tasksFragment, TASKS_TAG)
   }
тебе тут не нужны AsyncTask'и
источник

Sergey λ in Android arch. components
когда dao возвращает LiveData, он выполняет квери через свой ComputationalLiveData, которая на своём экзекюторе
источник

Sergey λ in Android arch. components
и получается ты просто кидаешь инстанс LiveData с bg на ui ))
источник

Y

Yuriy in Android arch. components
Andrey Gaysin
Спасибо, почитаю про это!
Так это будут те же яйца. Я бы оставил сабжекты. Я так понимаю речь идёт о rxjava.
источник

AG

Andrey Gaysin in Android arch. components
Yuriy
Так это будут те же яйца. Я бы оставил сабжекты. Я так понимаю речь идёт о rxjava.
да, всё верно
источник

Sergey λ in Android arch. components
Sergey λ
и получается ты просто кидаешь инстанс LiveData с bg на ui ))
и wtf?
GetTaskAsyncTask(tasksDao).execute(projectId).get()
источник

Sergey λ in Android arch. components
зачем вообще асинктаск если ты вызываешь его брокирующе )))
источник

Sergey λ in Android arch. components
какой смысл
private var projects: LiveData<List<Project>> = repository.getProjects()
fun getProjects() = projects
источник

ST

Sasha Tainyuk in Android arch. components
Наверное потому что гугл во всех примерах юзают таски, вот народ не разобравшись пишет
источник

Sergey λ in Android arch. components
Sasha Tainyuk
Наверное потому что гугл во всех примерах юзают таски, вот народ не разобравшись пишет
в примерах с Room LiveData точно нету
источник

Sergey λ in Android arch. components
даже если так, то пишут не разобравшись как работает сам AsyncTask 😒
источник

ST

Sasha Tainyuk in Android arch. components
Sergey λ
даже если так, то пишут не разобравшись как работает сам AsyncTask 😒
Тоже верно
источник

Sergey λ in Android arch. components
AsyncTask, Карл 😢
источник

Sergey λ in Android arch. components
что может быть проще? извините, меня просто бомбит, пойду кофе пить
источник

ST

Sasha Tainyuk in Android arch. components
Sergey λ
что может быть проще? извините, меня просто бомбит, пойду кофе пить
Ты держись, иногда бывает.)
источник

Sergey λ in Android arch. components
😩
источник

I

Ildarov in Android arch. components
Sergey λ
и wtf?
GetTaskAsyncTask(tasksDao).execute(projectId).get()
наверное после rx , вообще разучаться писать код асинхронно))
источник

Y

Yuriy in Android arch. components
моё ощущение, что ААС для того чтобы индусы совсем уж всё не пихали в одно активити, хоть немного приучались к цивилизации. мне лично зашло только Room и VM из всего
источник

Y

Yuriy in Android arch. components
вместо LiveData - rx2
источник

Y

Yuriy in Android arch. components
если кому надо могу скинуть сслыку на перевод оф.доков ААС
источник