domingo, 1 de julho de 2018

Rumo ao Certificado Android:LiveData e Observer Pattern

O que é?
LiveData é uma classe que observa e notifica mudanças de dados, respeitando ao mesmo tempo, o ciclo de vida de outros objetos, como Activities e Fragments.

Como usar:

Adicionando Dependências:
No Gradle, adicionar as seguintes dependências:

dependencies{

    implementation "android.arch.lifecycle:extensions:1:1:0"
    annotationProcessor "android.arch.lifecycle:compiler:1.1.0"

}

Adicionando em um DAO
Vamos pegar o DAO feito no post sobre Room e vamos fazer o seguinte: como nós precisamos saber se houve alguma mudança na lista de todos os nomes, então vamos adicionar, mudando o retorno da função com LiveData (linha 04). Obviamente, qualquer referência a essa função deve ser mudada também. Segue o código modificado:

01. @Dao
02. public interface NameDao{

03.   @Query("SELECT * FROM name ORDER BY priority")
04.   LiveData<List<NameEntry>> loadAllNames();

05.   @Insert
06.   void insertName(NameEntry nameEntry);

07.   @Update(onConflict=OnConflictStrategy.REPLACE)
08.   void updateName(NameEntry nameEntry);

09.   @Delete
10.   void deleteName(NameEntry nameEntry);

11.   @Query("SELECT * FROM name WHERE id=:id")
12.   NameEntry loadNameById(int id);
13. }

Adicionando um Observable
Agora, vamos adicionar um Observer ao LiveData para ser notificado. Supondo que temos o seguinte método (ver abaixo) em uma Activity para pegar a lista de nomes no banco de dados:



01. public class ActivityName extends Activity{

02.   private void getAllNames(){
03.     final LiveData<List<NameEntry>> names = bd.namesDAO().loadAllNames();
04.     names.observe(this, new Observer<List<NameEntry>>(){
          
05.        @Override
06.        public void onChange(@Nullable List<NameEntry> namesEntries){
07.           //Recebendo os dados atualizados do LiveData
08.        }

09.     });

10.  }

11.}

O método acima agora só precisa ser executado uma vez (geralmente no onCreate), e qualquer mudança que ocorrer no banco de dados agora, o método onChange (linha 05-08) do objeto Observer que criamos na linha 4.

Nenhum comentário:

Postar um comentário