Je suis en train de faire comme ça ...Comment renvoyer une liste sur la méthode OnResponse utilisée sur la retrofit?
public final List<ClientResponse> returnedList2 = new ArrayList<>();
clientPost3(nome, returnedList2);
Et puis en appelant la méthode clientPost3 qui est ci-dessous:
public void clientPost3(String nome, final List<ClientResponse> returnedList) {
Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(SERVER_URL)
.build();
final Interface service = retrofit.create(Interface.class);
Call<List<ClientResponse>> call = service.postClient(nome);
call.enqueue(new Callback<List<ClientResponse>>() {
@Override
public void onResponse(Call<List<ClientResponse>> call, Response<List<ClientResponse>> response) {
for(ClientResponse clientResponse: response.body()){
Log.e(TAG, clientResponse.getCliente());
returnedList.add(clientResponse);
}
Log.e(TAG, "Success");
Log.e("Teste2", returnedList.toString());
}
@Override
public void onFailure(Call<List<ClientResponse>> call, Throwable t) {
Log.e(TAG, "FAIL");
}
});
}
Cependant, returnedList2 est vide devient vide après l'appel de la méthode clientPost3.
Que dois-je faire pour obtenir la liste returnsList qui se trouve dans onResponse?
Vous avez 2 options: 1- déclarer returnedList2 au niveau de la classe, 2- utiliser un rappel ou d'une méthode qui prend la liste et l'utilise – MatPag
La rénovation est asynchrone! Tout code immédiatement après clientPost3 va presque toujours s'exécuter avant onResponse arrive même ... Retour de la liste n'est pas le problème. Le problème consiste à appeler les méthodes dans le bon ordre. –