rxandroid - rxjava gradle
RxJava+Retrofit-hacer mĂșltiples llamadas (2)
Tengo un sólido conocimiento de la función Retrofit cuando utilizo las llamadas asíncronas y de sincronización. Sin embargo, encontré un pequeño problema al crear una tarea compleja, que tengo que:
- Haga una solicitud para obtener la Lista de ID (aproximadamente 20-30 ID)
- Después de obtener la lista de ID, me gustaría hacer llamadas asíncronas para obtener información sobre cada objeto, definido por ID. Quiero hacer 20-30 solicitud en paralelo. Deseo observarlo para actualizar la interfaz de usuario después de lograr recibir todos los datos de las llamadas asíncronas.
Leí sobre ese tema y me di cuenta de que RxJava resolvería mi problema. Pero, francamente, hasta ahora me ha resultado muy difícil entender todo el proceso.
Sería genial si leyera algún ejemplo correcto para sumergirme en el problema de RxJava / RxAndroid.
Parece que lo que realmente estás buscando es información o ejemplos sobre cómo comenzar con RxJava, así que te sugiero que eches un vistazo a esta excelente serie de artículos de Dan Lew: http://blog.danlew.net/2014/09/15/grokking-rxjava-part-1/
Esta serie debe contener suficiente material para darle una buena idea de cómo implementar su función.
Con este ejemplo, puede obtener una lista de ID, dividirla en observables individuales, llamar a un servicio para cada ID individual y recibir notificaciones n
veces para cada respuesta de getDetails
.
service.getIds()
.flatMap(ids -> Observable.from(ids))
.map(id -> service.getDetails(id))
.subscribe(detailed -> updateUi(detailed));
Puede usar la función Observable.zip
para esperar varias llamadas paralelas, pero no sé si puede usarla en una llamada de tamaño variable.
Echa un vistazo a este example :
El soporte de actualización para Observable también facilita la combinación de varias llamadas REST. Por ejemplo, supongamos que tenemos una llamada que recibe la foto y una segunda que recibe los metadatos. Podemos comprimir los resultados juntos:
Observable.zip(
service.getUserPhoto(id),
service.getPhotoMetadata(id),
(photo, metadata) -> createPhotoWithData(photo, metadata))
.subscribe(photoWithData -> showPhoto(photoWithData));