Salve.
Come mai se faccio una cosa del genere:
(questo avviene dentro doInBackground di un AsyncTask)
Dove le query sono in un'altra classe, per esempio:codice:HashMap<String, String> map = new HashMap<String, String>(); QueryUtils.queryNumberOfStudents(classroomText, map); QueryUtils.queryNumberOfSeats(classroomText, map);
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.

Rispondi quotando