/**
* Synchronously send the request and return its response.
*
* @throws IOException if a problem occurred talking to the server.
* @throws RuntimeException (and subclasses) if an unexpected error occurs creating the request
* or decoding the response.
*/
Response<T> execute() throws IOException;
/**
* Asynchronously send the request and notify {@code callback} of its response or if an error
* occurred talking to the server, creating the request, or processing the response.
*/
void enqueue(Callback<T> callback);
<uses-permission android:name="android.permission.INTERNET" />
должно быть вне тега activity, на уровень выше.
Вы выполнили call, дождались, когда запрос закончится и в нём стартовали ещё несколько асинхронных запросов call2.enqueue(). Затем, не дожидаясь выполнения всех call2, вы скрываете прогресс, настраиваете список и показываете его. Всё это время запросы call2 могут выполняться. Вам либо надо в call2 вызывать notifyDataSetChanged(), либо ждать каким-то образом, пока все запросы выполнятся. Ждать можно просто - перед вызовом call2.enqueue() counter++; при заходе в onResponse/onFailure counter--; когда counter ==0 - все запросы выполнены.
Также непонятно, что за массив models, такое ощущение, что вокруг него пляски избыточны.
P.S. я бы стал решать эту задачу, используя RxJava, благо ретрофит её поддерживает. Но вам этого не советую - сейчас не потянете.