Autore Topic: Inviare grosse quantità di dati ad un server MySQL remoto  (Letto 833 volte)

Offline omix

  • Nuovo arrivato
  • *
  • Post: 23
  • Respect: 0
    • Mostra profilo
Inviare grosse quantità di dati ad un server MySQL remoto
« il: 20 Settembre 2011, 10:11:09 CEST »
0
Ciao ragazzi,
ho un problema: tento di inviare i dati presenti sul database locale che ho creato in Android ad un server MySQL remoto. Per farlo utilizzo degli httpPost, in cui ogni chiamata contiene una riga della tabella che sto cercando di "sincronizzare". Sia per spedire che per ricevere i dati da e verso il server, utilizzo le librerie JSON e tutto funziona bene se le chiamate sono poche.
Il problema si presenta quando l'applicazione Android che ho sviluppato deve inviare al server molte righe (per ora le prove le ho fatte con circa un centinaio di rihge)  e in questo caso il server riceve pochissimi dati (penso le prime 10 o 20 righe) e tutto il resto si perde. Di seguito incollo le righe specifiche per l'invio dei dati:
Codice (Java): [Seleziona]
        protected InputStream sendRequest() {
                InputStream  is = null;
                try {
                        if(! mURL.endsWith("/") )
                                mURL += "/";
                        if(! mURL.startsWith("http://") )
                                mURL = "http://" + mURL;
                       
                        String args = "";
                        for(int i=0; i<mOutputPairs.size(); i++) {
                                if(i>0)
                                        args += "&";
                                else
                                        args += "?";
                                args += mOutputPairs.get(i).getName() + "=" +
                                mOutputPairs.get(i).getValue();
                        }
                        Log.d(TAG, "           Trying to connect to  " + mURL + mScript + args);
                        HttpClient httpclient = new DefaultHttpClient();
                        HttpPost httppost = new HttpPost(mURL + mScript);
                        httppost.setEntity(new UrlEncodedFormEntity(mOutputPairs));
                        HttpResponse response = httpclient.execute(httppost);
                        HttpEntity entity = response.getEntity();
                        is = entity.getContent();
                } catch(Exception e) {
                        is = null;
                        Log.e(TAG, "Error in http connection "+e.toString());
                }
               
                return is;
        }


La relativa riga di log è:
D/TableUpdater(  385):            Trying to connect to  http://192.168.1.2/insert.php?table=PHYSICAL_ACTIVITY&username=homersimpson&password=ilovedonuts&activity_date=2011-08-14&activity_type=Tapis roulant&starting_time=18:27:00&expected_duration=30&expected_heartrate=150&starting_glycemia=100&expected_carbohydrates=10&real_insulin_units=7&last_injiection_time=13:30:00

Ora, vi chiedo: per sincronizzare i 2 database (locale e remoto), il meoto che sto utilizzando (una httpPost per riga) è il metodo migliore? Se no, quale mi consigliate?
Se non ho altre alternative, come posso fare in modo che le richieste vengano inviate una alla volta e che tra l'invio di una e l'invio dell'altra venga attesa la risposta positiva del server?

Grazie mille!

Offline Luigi.Arena

  • Utente senior
  • ****
  • Post: 616
  • DACIA DUSTER 4X4 SUPER
  • Respect: +56
    • Mostra profilo
    • ArenaWebTest
  • Dispositivo Android:
    epad m009
  • Play Store ID:
    Luigi Arena
  • Sistema operativo:
    Windows 7
Re:Inviare grosse quantità di dati ad un server MySQL remoto
« Risposta #1 il: 20 Settembre 2011, 18:01:44 CEST »
0
Io onestamente avrei serializzato i dati in un xml e avrei inviato l'xml.
a quel punto lato mysql avrei fatto un parse sul'xml ricevuto.
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato .

Offline omix

  • Nuovo arrivato
  • *
  • Post: 23
  • Respect: 0
    • Mostra profilo
Re:Inviare grosse quantità di dati ad un server MySQL remoto
« Risposta #2 il: 21 Settembre 2011, 15:37:24 CEST »
0
Ciao Luigi,
innanzitutto ti ringrazio di avermi risposto. Ieri sera sono riuscito a vero problema da cui è scaturito il post non erano le chiamate HTTPPOst ma nello script PHP lato server che causava il mancato inserimento nel database remoto MySQL.
Ora tutto viene inviato correttamente al server e soprattutto ho capito che le chiamate HTTPPost vengono eseguite una alla volta come in effetti speravo. Resta indubbiamente il fatto che fare tante chiamate non è propriamente efficiente...
Le soluzioni per migliorare la situazione attuale sono quindi quella da te proposta, ovvero inviare un file XML oppure continuare con HTTPPost ma sfruttando JSON.
Tra l'altro, la soluzione attuale oltre ad essere inefficiente è anche più delicata per quanto riguarda la gestione degli errori/eccezioni... dovrò sicuramente apportare dei cambiamenti.
Ringrazio ancora per il suggerimento, spero che questo mio post sia utile anche ad altri :-)

Offline Luigi.Arena

  • Utente senior
  • ****
  • Post: 616
  • DACIA DUSTER 4X4 SUPER
  • Respect: +56
    • Mostra profilo
    • ArenaWebTest
  • Dispositivo Android:
    epad m009
  • Play Store ID:
    Luigi Arena
  • Sistema operativo:
    Windows 7
Re:Inviare grosse quantità di dati ad un server MySQL remoto
« Risposta #3 il: 21 Settembre 2011, 15:44:55 CEST »
0
Di nulla figurati  ;-)
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato .