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.