I am implementing an example from Github (Retrofit 2, Jackson parser and google map distance-matrix API), to calculate the distance between nodes using distance-matrix API in an android application, the example sends only one request, and because there is a limited number of destinations and origins, I have to send multiple requests. The problem is when I tried a loop, it repeats the request until the nodes are over and don't read the response just the final one, any idea why is that?
 private void getDistanceInfo() {
    //  https://maps.googleapis.com/maps/api/distancematrix/json?destinations=Atlanta,GA|New+York,NY&origins=Orlando,FL&units=metric&key=AIzaSyC8RepIY9p7Jv-6wet6qDTtOPJfgPiLN_Q
    for ( t = 0; t < points_arc.length-1; t++) {
        for ( g = 0; g < points_arc.length-1; g++) {
            Map<String, String> mapQuery = new HashMap<>();
            mapQuery.put("units", "metric");
            mapQuery.put("origins",points_arc[t]);
            mapQuery.put("destinations",points_arc[g]);
            mapQuery.put("key", "...");
    DistanceApiClient client = RestUtil.getInstance().getRetrofit().create(DistanceApiClient.class);
    Call<DistanceResponse> call = client.getDistanceInfo(mapQuery);
    call.enqueue(new Callback<DistanceResponse>() {     //the line where it stops back to the loop
        @Override
                public void onResponse(Call<DistanceResponse> call, Response<DistanceResponse> response) {
                            if (response.body() != null &&
                                    response.body().getRows() != null &&
                                    response.body().getRows().size() > 0 &&
                                    response.body().getRows().get(0) != null &&
                                    response.body().getRows().get(0).getElements() != null &&
                                    response.body().getRows().get(0).getElements().size() > 0 &&
                                    response.body().getRows().get(0).getElements().get(0) != null &&
                                    response.body().getRows().get(0).getElements().get(0).getDistance() != null &&
                                    response.body().getRows().get(0).getElements().get(0).getDuration() != null) {
                                Element element = response.body().getRows().get(0).getElements().get(0);
                                //   showTravelDistance(element.getDistance().getValue());
                                mat[t][g] = element.getDistance().getValue();
                                mat_time[t][g] = element.getDuration().getValue();
                            }
                @Override
                public void onFailure(Call<DistanceResponse> call, Throwable t){
                }
                        
                 
Update: after implementing RxJava i don't get any answer, i am new to RxJava so please point out any possible errors.
 private void getDistanceInfo() {
 for ( t = 0; t < points_arc.length-1; t++) {
        for (g = 0; g < points_arc.length - 1; g++) {
            Map<String, String> mapQuery = new HashMap<>();
            mapQuery.put("units", "metric");
            mapQuery.put("origins", points_arc[t]);
            mapQuery.put("destinations", points_arc[g]);
            mapQuery.put("key", "...");
            DistanceApiClient client = RestUtil.getInstance().getRetrofit().create(DistanceApiClient.class);
            Observable<Response<DistanceResponse>> call= client.getDistanceInfo(mapQuery);
            Context context = getApplicationContext();
            CharSequence text = "Connecting";
            int duration = Toast.LENGTH_LONG;
            Toast toast = Toast.makeText(context, text, duration);
            toast.show();
            call.observeOn(AndroidSchedulers.mainThread())
                    .subscribeOn(Schedulers.io())
                    .subscribe();
            new Subscriber<Response<DistanceResponse>>() {
                @Override
                public final void onCompleted() {
                    // do nothing
                }
                @Override
                public final void onError(Throwable e) {
                    Log.e("GithubDemo", e.getMessage());
                }
                @Override
                public void onNext(Response<DistanceResponse> response) {
                    //   Response<DistanceResponse>  response;
                    //   public void handleResponse(Observable<DistanceResponse> call, Response<DistanceResponse> response) {
                    for (int j = 0; j < points_arc.length - 1; j++) {
                        for (int i = 0; i < points_arc.length - 1; i++) {
                            if (response.body() != null &&
                                    response.body().getRows() != null &&
                                    response.body().getRows().size() > 0 &&
                                    response.body().getRows().get(0) != null &&
                                    response.body().getRows().get(0).getElements() != null &&
                                    response.body().getRows().get(0).getElements().size() > 0 &&
                                    response.body().getRows().get(0).getElements().get(0) != null &&
                                    response.body().getRows().get(0).getElements().get(0).getDistance() != null &&
                                    response.body().getRows().get(0).getElements().get(0).getDuration() != null) {
                                Element element = response.body().getRows().get(0).getElements().get(0);
                                //   showTravelDistance(element.getDistance().getValue());
                                mat[j][i] = element.getDistance().getValue();
                                mat_time[j][i] = element.getDuration().getValue();
                            }
                        }
also changed:
public interface DistanceApiClient {
@GET("maps/api/distancematrix/json")
Observable<Response<DistanceResponse>> getDistanceInfo(
        @QueryMap Map<String, String> parameters
);
}
 
    