Comment faire de plusieurs demande et attendre jusqu'à ce que les données sont venus de toutes les demandes pour le rétrofit 2.0 - android
code actuel:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Constant.BASEURL)
.addConverterFactory(GsonConverterFactory.create())
.build();
APIService service = retrofit.create(APIService.class);
Call<ResponseWrap> call = service.getNewsData();
call.enqueue(new Callback<ResponseWrap>() {
@Override
public void onResponse(Call<ResponseWrap> call1, Response<ResponseWrap> response) {
if (response.isSuccess()) {
ResponseWrap finalRes = response.body();
for(int i=0; i<finalRes.getResponse().getResults().size(); ++i){
String title = finalRes.getResponse().getResults().get(i).getWebTitle();
News n = new News(titleCategory, title, null);
newsList.add(n);
}
AdapterRecommendation adapter = new AdapterRecommendation(getApplicationContext(), newsList);
listView.setAdapter(adapter);
}
else{
Toast.makeText(getApplicationContext(), "onResponse - something wrong" + response.message(), Toast.LENGTH_LONG).show();
}
}
@Override
public void onFailure(Call<ResponseWrap> call1, Throwable t) {
Toast.makeText(getApplicationContext(), "exception: " + t.getMessage(), Toast.LENGTH_LONG).show();
}
});
fonctionne très bien.
Maintenant, je veux faire de nombreux appels (nombre d'appels sera décidé au moment de l'exécution) et de tous les appels donne des données dans le même format. les données de tous les appels doit être ajouter à la newsList. Une fois que les données sont disponibles à partir de tous les appels et ajouté à newsList, appel
AdapterRecommendation adapter = new AdapterRecommendation(getApplicationContext(), newsList);
listView.setAdapter(adapter);
Quelqu'un peut m'aider quel est le meilleur moyen pour obtenir des données à partir de plusieurs appels et attendez jusqu'à ce que la demande n'est pas de plus dans la modernisation 2.0.
Si vous avez trouvé la solution merci de la partager avec moi.
OriginalL'auteur Devesh Agrawal | 2016-04-07
Vous devez vous connecter pour publier un commentaire.
Le propre et soigné approche d'attendre jusqu'à ce que l'ensemble de vos demandes sera faite, c'est d'utiliser Retrofit2 en conjonction avec RxJava2 et ses
zip
fonction.Ce
zip
n'est fondamentalement construit de nouvelles observables qui attend jusqu'à ce que toutes vos rénovationsObservable
demandes sera fait et puis il émet son propre résultat.Voici un exemple Retrofit2 interface avec Observables:
Dans le code où vous allez faire de multiples demandes et seulement après que tous d'entre eux vont terminer de faire quelque chose d'autre, vous pouvez ensuite écrire le code suivant:
C'est tout 🙂
Juste au cas où veux montrer comment le même code ressemble à
Kotlin
.oui je le fais. Cochez cette réponse: stackoverflow.com/a/6343299/1824898
Je l'ai fait, j'ai activer les deux comportements .zip, .subscribeOn(Planificateurs.io()) .observeOn(Planificateurs.newThread()), Après avoir disparu, votre réponse enregistrer mes heures de plus.
Merci pour la réponse, Comment nous identifions les différentes réponse à la requête de l'objet de l'Objet[], une procédure pour la restauration de certaines API(transactions)
J'ai oublié que ma réponse était liée à la rénovation. Donc oui, observeOn/subscribeOn devrait faire l'affaire. Il y a une autre réponse ici: stackoverflow.com/a/44007611/1824898
OriginalL'auteur Клаус Шварц
Vous pouvez l'obtenir en faisant synchrone rénovation des appels. Pour éviter NetworkOnUiException, je le fais à l'intérieur de asynctask.
Cela permettra d'assurer que l'appel de la deuxième se produit uniquement lorsque le premier est terminé.
Si vous utilisez rx-java, vous pouvez utiliser Zip/flatMap opérateur utilisé dans cette réponse.
Ce n'est pas une bonne façon de mettre en œuvre. C'est en gros, le fil à l'intérieur du fil.
pas de son pas de filetage filetage intérieur. Ce sont des appels synchrones. Tout va se passer dans le même thread.
OriginalL'auteur Ankit Aggarwal
Si vous n'avez pas l'esprit en ajoutant encore une dépendance que vous pourriez utiliser RxAndroid.
En particulier, vous devriez changer votre interface de Service, avec quelque chose de similaire à ceci:
Maintenant, vous pouvez faire ceci:
Il suffit de changer numberOfTimes et il va fonctionner! Espérons que cela aide.
P. s. peut-être qu'il y a de plus propre de façons de le faire.
J'aime vraiment cette pièce: captechconsulting.com/blogs/...
Je suis à l'aide de Rénovation et de RxJava dans mon projet, j'ai autour de 4 Api d'OBTENIR de l'extraction de données à partir de 4 tables à partir du serveur et d'avoir à insérer dans les tables SQLite en utilisant ActiveAndroid ORM. Je veux afficher une barre de progression lors du téléchargement de données jusqu'à la fin et inséré au niveau local. Table locale nombre doit être égal à table de serveur, on compte chaque tableau de comptage. Je tiens également à appeler l'API dans un ordre spécifique sur chaque API réponse à la suivante. Qui RxJava et de la Modernisation de la bibliothèque de mots-clés, opérateurs et les filtres doivent être utilisés?
si vous avez trouvé une solution, pouvez vous s'il vous plaît le partager ici, car je suis aussi en train d'essayer de faire de même. Merci
OriginalL'auteur Jibbo