/ / Retrofit 2 réponse de retour d’appel asynchrone - Android, asynchrone, android-asynctask, httprequest, retrofit

Réponse de retour d'appel asynchrone Retrofit 2 - Android, asynchrone, androïde-asynchrone, httprequest, retrofit

Je fais une application Android avec Retrofit, le problème que j’ai, c’est que j’ai besoin de renvoyer le response.body () du Callback, c’est mon code:

public class RoundListProvider {
//Load Rounds
private static RoundsInterface roundClient = RetroBuilder.createService(RoundsInterface.class);
private static RoundList mRoundList;
public static RoundList getRoundList(final Context mContext)
{
Toast.makeText(mContext, "We"re in",   Toast.LENGTH_LONG).show();
//Fetch info from rounds
Call<RoundList> call = roundClient.getRounds();
call.enqueue(new Callback<RoundList>() {
@Override
public void onResponse(Response<RoundList> response, Retrofit retrofit) {
Log.d("BODY", response.body().toString());
Log.d("MESSAGE", response.message());
Toast.makeText(mContext, "Conexión al servidor hecha con exito", Toast.LENGTH_LONG).show();
mRoundList = response.body();
}

@Override
public void onFailure(Throwable t) {
Log.d("BODY", t.getMessage());
Log.d("ERRRO", t.getStackTrace().toString());
}
});
return mRoundList;
}
}

Comme vous pouvez l’imaginer, le retour mRoundList est toujours nul, car n’attend jamais qu’une réponse soit fournie, est-ce que quelqu'un peut m'aider à cet égard ?.

Réponses:

0 pour la réponse № 1

Vous ne pouvez pas mélanger des appels de méthode synchrone et des rappels asynchrones de la sorte Callbackvous devez y rester.

Le code qui appelle getRoundList() (probablement dans certains Activity ou Fragment) puis fait quelque chose avec la valeur retournée, non? Au lieu de simplement stocker le corps à mRoundList dans le onResponse - Faites ce que vous voulez avec la valeur.


0 pour la réponse № 2

Le problème, c’est que j’avais besoin d’utiliser les données de réponse dans une vue Recycler. C’est pourquoi j’ai fait cela. Ce n’est peut-être pas le meilleur, mais cela fonctionne. Dans mon fournisseur, j'ai ajouté une nouvelle fonction:

public static void savedRoundList(RoundList roundList, Activity activity, Context context)
{
RecyclerView recyclerView = (RecyclerView) activity.findViewById(R.id.rvRounds);

recyclerView.setHasFixedSize(true);

LinearLayoutManager linearLayoutManager = new LinearLayoutManager(activity);
recyclerView.setLayoutManager(linearLayoutManager);

List<RoundData> roundData = roundList.getRounds();
RoundAdapter adapter = new RoundAdapter(roundData);
Log.d("RESPONSE & ERROR", roundList.getStatus()+ " "+ roundList.getCode());

recyclerView.setAdapter(adapter);
}

Ainsi, dans le rappel, je viens de nous la fonction savedRoundList:

savedRoundList(response.body(), mActivity, mContext);

Et voilà, ça marche.