Comment puis-je retourner de la valeur à partir de la fonction onResponse de Rénovation?
Je suis en train de retourner une valeur que je reçois de onResponse
méthode dans retrofit
demande d'appel, est-il possible que je peux obtenir cette valeur de la surdéfini méthode? voici mon code:
public JSONArray RequestGR(LatLng start, LatLng end)
{
final JSONArray jsonArray_GR;
EndpointInterface loginService = ServiceAuthGenerator.createService(EndpointInterface.class);
Call<GR> call = loginService.getroutedriver();
call.enqueue(new Callback<GR>() {
@Override
public void onResponse(Response<GR> response , Retrofit retrofit)
{
jsonArray_GR = response.body().getRoutes();
//i need to return this jsonArray_GR in my RequestGR method
}
@Override
public void onFailure(Throwable t) {
}
});
return jsonArray_GR;
}
je ne peux pas obtenir la valeur de jsonArray_GR
parce que, pour être en mesure de l'utiliser dans onResponse
méthode que j'ai besoin de le déclarer finale et je ne peux pas lui donner une valeur.
OriginalL'auteur Cristian Cam G | 2015-12-09
Vous devez vous connecter pour publier un commentaire.
Le problème, c'est que vous tentez de façon synchrone retourner la valeur de
enqueue
, mais c'est une méthode asynchrone à l'aide d'un rappel de sorte que vous ne pouvez pas le faire. Vous avez 2 options:RequestGR
méthode d'accepter un rappel, puis la chaîne de laenqueue
de rappel. Ceci est similaire à la cartographie dans des cadres comme rxJava.Ceci serait à peu près comme:
L'inconvénient de cette approche est qu'il pousse juste la async des trucs un autre niveau, qui pourrait être un problème pour vous.
BlockingQueue
,Promise
ou unObservable
ou même votre propre conteneur de l'objet (attention à être thread-safe) qui vous permet de vérifier et de définir la valeur.Cela ressemblerait à:
Vous pouvez ensuite synchrone attendre pour votre résultat dans votre méthode d'appel comme ceci:
Je vous suggère fortement de lire sur un framework comme rxJava.
Je ne pouvais pas le faire fonctionner soit avec le rf 2.0... vous permettra de savoir si/quand je reçois une solution de travail
merci beaucoup pour votre aide, j'ai demandé avant et quelqu'un pour répondre, il stackoverflow.com/a/37142046/4226651, mais im toujours ne sais pas comment l'utiliser
Qu'est-ce que l'emballage de l'objet de Rappel?
OriginalL'auteur torbinsky