este problema se puede tratar de diferentes formas, pero nosotros te compartimos la respuesta más completa en nuestra opinión.
Solución:
Supongo que está utilizando componentes de arquitectura de Android. En realidad, no importa donde sea que estés llamando. service, asynctask or handler
para actualizar los datos. Puede insertar los datos del servicio o de asynctask usando postValue(..)
método. Tu clase se vería así:
private void loadUsers()
// do async operation to fetch users and use postValue() method
users.postValue(listOfData)
como el users
es LiveData
, Room
La base de datos es responsable de proporcionar datos a los usuarios donde sea que se inserte.
Note:
En una arquitectura similar a MVVM, el repositorio es principalmente responsable de verificar y extraer datos locales y datos remotos.
Puedes usar MutableLiveData
método del subproceso de fondo.
private void loadUsers()
// do async operation to fetch users and use postValue() method
users.postValue(listOfData)
… en la función loadUsers() estoy obteniendo los datos de forma asincrónica… Si inicio un servicio para llamar a la API desde el método loadUsers(), ¿cómo puedo actualizar la variable de usuarios MutableLiveData> de ese servicio?
Si la aplicación está obteniendo datos de usuario en un subproceso en segundo plano, postValue (en lugar de setValue) será útil.
En el método loadData hay una referencia al objeto “usuarios” MutableLiveData. El método loadData también obtiene algunos datos de usuario nuevos de algún lugar (por ejemplo, un repositorio).
Ahora, si la ejecución está en un subproceso en segundo plano, MutableLiveData.postValue() actualiza los observadores externos del objeto MutableLiveData.
Tal vez algo como esto:
private MutableLiveData> users;
.
.
.
private void loadUsers()
// do async operation to fetch users
ExecutorService service = Executors.newSingleThreadExecutor();
service.submit(new Runnable()
@Override
public void run()
// on background thread, obtain a fresh list of users
List freshUserList = aRepositorySomewhere.getUsers();
// now that you have the fresh user data in freshUserList,
// make it available to outside observers of the "users"
// MutableLiveData object
users.postValue(freshUserList);
);
Si te apasiona la programación, eres capaz de dejar una división acerca de qué te ha impresionado de este artículo.