Recentemente sto esplorando l'architettura Android, che è stata introdotta di recente da Google. Dalla documentazione ho trovato questo:
public class MyViewModel extends ViewModel {
private MutableLiveData<List<User>> users;
public LiveData<List<User>> getUsers() {
if (users == null) {
users = new MutableLiveData<List<Users>>();
loadUsers();
}
return users;
}
private void loadUsers() {
// do async operation to fetch users
}
}
l'attività può accedere a questo elenco come segue:
public class MyActivity extends AppCompatActivity {
public void onCreate(Bundle savedInstanceState) {
MyViewModel model = ViewModelProviders.of(this).get(MyViewModel.class);
model.getUsers().observe(this, users -> {
// update UI
});
}
}
La mia domanda è, farò questo:
nella
loadUsers()
funzione sto recuperando i dati in modo asincrono dove controllerò prima il database (Room) per quei datiSe non ottengo i dati lì, effettuerò una chiamata API per recuperare i dati dal server web.
Inserirò i dati recuperati nel database (Stanza) e aggiornerò l'interfaccia utente in base ai dati.
Qual è l'approccio consigliato per farlo?
Se avvio una Service
per chiamare l'API dal loadUsers()
metodo, come posso aggiornare la MutableLiveData<List<User>> users
variabile da quella Service
?