Salve.

Come mai se faccio una cosa del genere:

(questo avviene dentro doInBackground di un AsyncTask)
codice:
HashMap<String, String> map = new HashMap<String, String>();
QueryUtils.queryNumberOfStudents(classroomText, map);
QueryUtils.queryNumberOfSeats(classroomText, map);
Dove le query sono in un'altra classe, per esempio:

codice:
public static void queryLecture(String classroomText, final HashMap<String, String> myMap) {
        HashMap<String, String> map = new HashMap<>();
        map.put("getLabel", classroomText);
        ParseCloud.callFunctionInBackground("getCurrentLesson", map, new FunctionCallback<String>() {
            @Override
            public void done(String result, ParseException e) {
                if (e == null) {
                    myMap.put(myKey, result);
                } else {
                    Log.e("Current lecture error: ", e.getMessage());
                }
            }
        });
    }

Quando le query hanno successo, nella classe contenente le query vedo che i risultati vengono messi nella mappa, ma nella classe chiamante la mappa risulta vuota.

l'onPostExecute di un AsyncTask (metodo dove io devo usare effettivamente i dati inseriti nella mappa) viene eseguito solo quando doInBackground, ha terminato.

Attualmente per aggirare questo problema all'avvio dell'activity creo un'istanza di un mio oggetto java-bean che uso al posto della mappa che vi ho mostrato. Solo che così è tutto un po troppo complesso per i miei gusti perché devo usare il pattern Observer per far capire all'Activity che il mio oggetto ha cambiato stato!

Sono costretto in questi problemi perché purtroppo a causa della loro struttura le query non possono ritornarmi un valore, ma solo fare side-effect su qualche oggetto.