Problema gestione AsyncTask tra client (App) e server (MySQL)
Ciao a tutti,
sono abbastanza nuovo alla programmazione android 4.3 e stavo cercando di crearmi una piccola applicazione Android (lato client) che fosse in grado di collegarsi ad un server web per memorizzare delle informazioni.
La logica che implemento è questa:
APP Android <-> HTTP <-> PHP <-> MySQL
Dove <-> sono operazioni di scrittura/lettura.
Per lanciare le operazioni di lettura o scrittura sfrutto gli AsyncTask che in background contattano in HTTP il server. Il tutto funziona bene, ma ho riscontrato un problema piuttosto fastidioso in fase di scrittura con gli AsyncTask che mi sta facendo dannare e non sono ancora riuscito a trovare una soluzione.
La situazione è la seguente:
L'Activity (PADRE) contiene un AsyncTask che visualizza la lista dei valori che legge dal server. (PADRE) ha un bottone che lancia un'Activity (FIGLIO) che è un form di inserimento valori. Quando l'utente vuole salvare i dati appena scritti nel form del (FIGLIO) schiacciando un bottone "OK", (FIGLIO) lancia il suo AsyncTask che accede al server e scrive (L'utente vuole inserire la parola "Dato1"). Al termine dell'operazione (1secondo al max) l'AsyncTask del (FIGLIO) si chiude e termina anche l'activity (FIGLIO). Il (PADRE) se ne accorge e rilancia il sua AsyncTask per aggiornare la lista con la nuova info.
Fin qua tutto bene, ma se decido di ricominciare il giro per effettuare una nuova registrazione -quindi clicco il bottone di (PADRE) e rifaccio il giro- in fase di nuova scrittura l'AsyncTask del (FIGLIO) scrive correttamente i nuovi dati (L'utente ha scritto "Dato2"), ma in backgroud rigira anche il vecchio AsyncTask del (FIGLIO) -cioè quello del giro precedente con le vecchie informazioni (cioè "Dato1")- e quindi mi ritrovo nel DB il nuovo dato ("Dato2") e il vecchio ("Dato1") che è stato riscritto!
In questo momento nel DB avrei:
"Dato1" <- scritto al primo giro
"Dato2" <- scritto al secondo giro
"Dato1" <- riscritto al secondo giro : vuol dire che il vecchio AsyncTask ha rigirato!
Spero di essere stato abbastanza chiaro sul mio problema. Rimane attivo il vecchio AsyncTask che non viene distrutto (sebbene cerchi di farlo) e che probabilmente viene rilanciato quando viene generato il secondo dall'Activity (FIGLIO).
Il mio obiettivo è impedire questa cosa e non riesco a capire cosa fare.
Avete dei suggerimenti?
Note:
-Ho provato a disabilitare l'AsyncTask con il comando task.cancel(true) e poi controllando questo valore in caso di rigiri ma senza esito buoni.
-Il corpo dell'AsyncTask è semplice e sequenziale, cioè non effettua cicli. Scrive ed esce.