Autore Topic: Gestione database in rete  (Letto 479 volte)

Offline angelo2005

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    cell
  • Sistema operativo:
    windows 7/8
Gestione database in rete
« il: 16 Giugno 2016, 09:55:42 CEST »
0
Buongiorno,
Ho realizzato un semplice app che gestisce una serie di medicinali ,con un database Sqlite , ora pero devo dare la possibilità a n. 5 persone e quindi da 5 app  installate su Tablet/Cellulari di poter interagire con lo stesso database , aggiornare, visualizzare, inserire , cancellare , ovviamente le modifiche effettuate da una persona devono essere  immediatamente disponibili per le altre.
Ho guardato gli altri post per capire se trattassero le stesso problema ma non ho trovato nulla di simile.
Disponibile ad ulteriori chiarimenti.

Anticipatamente ringrazio.

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 580
  • Respect: +130
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:Gestione database in rete
« Risposta #1 il: 16 Giugno 2016, 11:13:57 CEST »
0
In pratica devi sincronizzare i DB delle varie installazioni.

Non è banale, soprattutto se sei hai strutturato l'app per funzionare isolatamente, come mi sembra di aver capito.

Puoi valutare l'idea di utilizzare il SyncAdapter, ma per rendere le modifiche di un utente immediatamente disponibili agli altri hai anche bisogno di qualche meccanismo di push dei dati.
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline angelo2005

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    cell
  • Sistema operativo:
    windows 7/8
Re:Gestione database in rete
« Risposta #2 il: 16 Giugno 2016, 12:28:18 CEST »
0
Grazie Ohmnibus per la tua attenzione , perdonami se non sono esperto in questo settore ma e possibile  memorizzare il database su un server (acquistando un spazio di memoria, su internet )   e poi i 5 utenti lo gestiscono dai diversi dispositivi  con app androi installata ?

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 580
  • Respect: +130
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:Gestione database in rete
« Risposta #3 il: 16 Giugno 2016, 12:53:54 CEST »
0

Devi comunque implementare un meccanismo di sincronizzazione tra le varie installazioni dell'app
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline angelo2005

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    cell
  • Sistema operativo:
    windows 7/8
Re:Gestione database in rete
« Risposta #4 il: 16 Giugno 2016, 12:57:04 CEST »
0
Scusa  Ohmnibus , ma non posso gestire un database sqlite da app android tramite indirizzo IP  ?

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 580
  • Respect: +130
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:Gestione database in rete
« Risposta #5 il: 16 Giugno 2016, 13:02:28 CEST »
0
Non è così semplice. Sqlite nasce come database embedded, non come server, non supportando bene la concorrenza: https://www.sqlite.org/faq.html#q5
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline angelo2005

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    cell
  • Sistema operativo:
    windows 7/8
Re:Gestione database in rete
« Risposta #6 il: 16 Giugno 2016, 13:16:50 CEST »
0
Grazie  Ohmnibus di tutte le spiegazioni che mi stai dando , sono disponibile anche ha cambiare base dati e migrare verso MYSQL se con questo tipo di database risolvo il mio problema. se per te e fattibile puoi linkarmi esempio. Ancora una volta grazie.

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 580
  • Respect: +130
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:Gestione database in rete
« Risposta #7 il: 16 Giugno 2016, 13:54:30 CEST »
0
Come accennato puoi decidere di utilizzare i SyncAdapter, ma richiedono molto sviluppo.

La guida su come usarli è qui: https://developer.android.com/training/sync-adapters/index.html

Oppure puoi appoggiarti ad un servizio cloud come Firebase:

https://firebase.google.com/docs/database/

Sul sito dovresti trovare tutte le informazioni necessarie per migrare

Purtroppo non so fornirti alcun codice di esempio oltre a quello presente sulle guide indicate.
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline Carni

  • Nuovo arrivato
  • *
  • Post: 41
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S3
  • Play Store ID:
    R3D5HA
  • Sistema operativo:
    Windows 10
Re:Gestione database in rete
« Risposta #8 il: 16 Giugno 2016, 15:57:01 CEST »
0
Grazie Ohmnibus per la tua attenzione , perdonami se non sono esperto in questo settore ma e possibile  memorizzare il database su un server (acquistando un spazio di memoria, su internet )   e poi i 5 utenti lo gestiscono dai diversi dispositivi  con app androi installata ?

Ciao angelo, è possibile memorizzare su un server un db ma, come diceva Ohmnibus
Sqlite nasce come database embedded, non come server, non supportando bene la concorrenza: https://www.sqlite.org/faq.html#q5

Quindi devi installare un dbms server come mysql. Per interfacciati ad esso devi creare delle pagine in php che facciano le azioni che desideri, come inserimento, cancellazione o modifiche di record perchè queste pagine garantiscono la sessione, quindi non hai problemi che normalmente vengono protetti con delle transazioni in sql.
Dall'applicazione invece devi fare la richiesta alla pagina php desiderata.
Io ho già programmato applicazioni simili ed ho utilizzato questa classe per effettuare la connessione da android.


Codice (Java): [Seleziona]
public class HttpConnect extends AsyncTask<Void, String, HttpResponse> {

    private ProgressDialog progressDialog;
    private String result = null;
    private String url = "";
    private String messageInsideDialog = "";
    private Activity a;
    private HashMap<String, String> datiInvio;

    public HttpConnect(Activity a, String url, HashMap<String, String> datiInvio, String messageInsideDialog) {
        this.a = a;
        this.url = url;
        this.datiInvio = datiInvio;
        this.messageInsideDialog = messageInsideDialog;
    }

    @Override
    protected void onPreExecute() {
            progressDialog = new ProgressDialog(a);
            progressDialog.setMessage(messageInsideDialog);
            progressDialog.show();
            progressDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
                public void onCancel(DialogInterface arg0) {
                    HttpConnect.this.cancel(true);
                    this.progressDialog.dismiss();
                }
            });
    }

    @Override
    protected HttpResponse doInBackground(Void... voids) {
        try {
            HttpParams httpParameters = new BasicHttpParams();
            int timeoutConnection = 5000;
            HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
            int timeoutSocket = 5000;
            HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
            HttpClient httpclient = new DefaultHttpClient(httpParameters);
            HttpPost httppost = new HttpPost(url);

            if (datiInvio != null) {
                List<NameValuePair> nameValuePairs = new ArrayList();
                 JSONObject jsonobj = new JSONObject();
                 for (Map.Entry<String, String> entry : datiInvio.entrySet()) {
                     jsonobj.accumulate(entry.getKey(), entry.getValue());
                 }
                 nameValuePairs.add(new BasicNameValuePair("req", jsonobj.toString()));
                }
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            }
            // Execute HTTP Post Request
            HttpResponse response = httpclient.execute(httppost);
            InputStream inputStream = response.getEntity().getContent();
            result = Functions.convertInputStreamToString(inputStream);
            return response;

        } catch (ConnectTimeoutException e) {
            return null;
        } catch (Exception e) {
            Log.e("error", e.toString());
        }
        return null;
    }

    @Override
    protected void onPostExecute(HttpResponse response) {
        if (response != null) {
            int statusCode = response.getStatusLine().getStatusCode();
            if (statusCode == 200) {
                //Ok per gestire la risposta
            } else {
                //Errore lato server
            }
        } else {
            //Errore di tempo, spesso causato dal server irraggiungibile o perchè non c'è connessione.
        }
        this.progressDialog.dismiss();
        return;
    }

Se cerchi su internet trovi tantissimi altri esempi. Questo è un progetto un po' vecchiotto quindi le classi che ho adoperato sono deprecate, ma funzionano.

Offline angelo2005

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    cell
  • Sistema operativo:
    windows 7/8
Re:Gestione database in rete
« Risposta #9 il: 16 Giugno 2016, 23:46:26 CEST »
0
Buonasera Carni , anche per te mille volte grazie , sto già lavorando  per provare il tuo esempio, vi manterrò aggiornati nella trasformazione della mia app . 

Post unito: 17 Giugno 2016, 08:36:31 CEST
Buongiorno Carni , posso chiederti se i passi da svolgere per raggiungere il mio obbiettivo sono giusti :

1) Acquistare spazio di memoria Web
2) trasferire il database su memoria Web
3) Installare Server Mysql , ma dove ?
4) Creare pagine PHP  per interagire con DB
5) Modificare App per lanciare pagine PHP

Tutto questo e giusto ? 

Aspetto tue notizie ...



« Ultima modifica: 17 Giugno 2016, 08:36:31 CEST da angelo2005, Reason: Merged DoublePost »

Offline Carni

  • Nuovo arrivato
  • *
  • Post: 41
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S3
  • Play Store ID:
    R3D5HA
  • Sistema operativo:
    Windows 10
Re:Gestione database in rete
« Risposta #10 il: 22 Giugno 2016, 18:44:06 CEST »
0
Scusa per il ritardo ma ho letto solo ora il post.
Il server MySql lo devi installare nello spazio di memoria web che hai acquistato (se utilizzi il metodo di hosting dovrebbe essere già installato ma dipende dall'offerta).
Il punto 5 è scorretto concettualmente. Non è che "lanci" la pagina php ma fai una richiesta e sono due cose un po' diverse. Facendo la richiesta alleggerisci la cpu del telefono perchè lasci svolgere il compito ad un altro computer (in questo caso il server web).