Autore Topic: Lettura dati su database remoto con app android  (Letto 274 volte)

Offline ridaria

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    huawei
  • Sistema operativo:
    windows 7
Lettura dati su database remoto con app android
« il: 01 Dicembre 2017, 10:22:36 CET »
0
Buongiorno,

Mi dareste delle indicazioni di base tutorial o altro da cui partire per implementare questa procedura.

Dovrei leggere dei dati da un database residente su server web, e mostrarli a video in una APP android.

GRAZIE

Offline berpao

  • Utente junior
  • **
  • Post: 89
  • Respect: +5
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2
  • Play Store ID:
    Paolo Bersan
Re:Lettura dati su database remoto con app android
« Risposta #1 il: 01 Dicembre 2017, 14:10:49 CET »
0
Ciao,
dando per scontato che il suddetto server web fornisca delle api da richiamare con una richiesta HTTP (webapi restful o web service che sia), l'idea di base è creare una richiesta http e gestirne il risultato) io per le richieste in android uso questa libreria che mi facilita il compito (è ben documentata, se segui gli esempi non dovresti avere difficoltà). Per la gestione del risultato dipenda cosa ti arriva indietro (json, xml, ecc), cmq anche li ci sono librerie che ti facilitano il compito , per esempio per json io uso le librerie interen di android (eccole qui).
Se vuoi maggiori dettagli dovremmmo entrare un po' di più nella situazione e avere maggiori informazioni su quello che devi fare ma sopratutto su quello che puoi fare (hai accesso al server? puoi sviluppare del codice da pubblicare su questo server? ecc ecc)
Fammi sapere
Paolo

Offline ridaria

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    huawei
  • Sistema operativo:
    windows 7
Re:Lettura dati su database remoto con app android
« Risposta #2 il: 01 Dicembre 2017, 17:31:33 CET »
0
GRAZIE :)


Certo che ho accesso al server.


Unica cosa che penso possa generare problemi è che è uno spazio web Microsoft, e cioè posso scrivere codice dot.net, con cui comunque già mi interfaccio con il database in questione che è MySQL.


Resto in attesa.


Grazie








Offline berpao

  • Utente junior
  • **
  • Post: 89
  • Respect: +5
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2
  • Play Store ID:
    Paolo Bersan
Re:Lettura dati su database remoto con app android
« Risposta #3 il: 04 Dicembre 2017, 08:13:36 CET »
0
Ciao, perchè pensi possa generare problemi? quali sono i tuoi dubbi? Dal punto di vista dell'app android non cambia niente se la pagina http che chiami è scritta in .net, java, php o qualsiasi altro linguaggio server-side; per l'app è una richiesta normalissima. Fammi sapere che dubbi hai, così magari li chiariamo...
Ciao
P

Offline ridaria

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    huawei
  • Sistema operativo:
    windows 7
Re:Lettura dati su database remoto con app android
« Risposta #4 il: 04 Dicembre 2017, 11:23:29 CET »
0
Ok, perfetto, allora dubbi non ne ho! :-)

Quindi possiamo avviarci in questo cammino. ( se sei disposto a darmi un pò di supporto)

Ti anticipo che sono un programmatore dot.net, sviluppo applicativi lato server web e desktop.

e mi sto appena avvicinando alla programmazione per android.
e per cominciare, vorrei creare una app da distribuire ad alcuni miei clienti con la quale possono leggere dei dati di vendita che sono appunto immagazzinati su un database residente su server web come ti avevo già anticipato.

Android Studio è installato e funzionante ;-), ed ho anche scritto un pò di codice funzionante.

Resto in attesa e GRAZIE




Offline berpao

  • Utente junior
  • **
  • Post: 89
  • Respect: +5
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2
  • Play Store ID:
    Paolo Bersan
Re:Lettura dati su database remoto con app android
« Risposta #5 il: 04 Dicembre 2017, 13:45:10 CET »
0
Ciao, no problem per il supporto, io sono qui...  :-)
Ciao
P

Offline ridaria

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    huawei
  • Sistema operativo:
    windows 7
Re:Lettura dati su database remoto con app android
« Risposta #6 il: 04 Dicembre 2017, 15:17:56 CET »
0
OK da dove parto?
Devo creare un web service sul web che accede al DB e legge i dati interessati?
Cosa deve restituire un file xml ? Giusto?

Offline berpao

  • Utente junior
  • **
  • Post: 89
  • Respect: +5
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2
  • Play Store ID:
    Paolo Bersan
Re:Lettura dati su database remoto con app android
« Risposta #7 il: 04 Dicembre 2017, 17:36:26 CET »
0
Ciao, si io partirei da li. Diciamo che come crearlo dipende da come è fatto il sito lato web. In generale se hai un sito scritto usando il framework asp.net MVC (dalla versione 4 in poi) allora potresti aggiungere le web api al progetto e partire da li.
 Altrimenti potresti optare per un web service soap o una pagina/chiamata web (in get presumo), diciamo che bene o male le opzioni potrebbero essere queste. Per la risposta, io userei json che è più leggero e cmq android ha delle librerie che ti permettono di manipolarlo, poi vedi tu se sei più avvezzo con l'xml usa quello
Ti consiglio inoltre di definirti una classe per le risposte in modo che tutte le risposte ricevute abbiamo la stessa struttura; i questo modo se hai bisogno di più chiamate che servano a scopi diversi, tutte le risposte saranno identiche strutturalmente parlando.
Io per esempio mi sono creato questa per un progetto in c# (non è il top dell'ingegneria software ma fa il suo dovere):

Codice (Java): [Seleziona]
    public class WebApiResponse {

        public DateTime Timestamp {
            get {
                return this._timeStamp;
            }
        }

        public String Executor {
            get {
                return this._executor;
            }
        }

        public String DeviceId {
            get {
                return this._deviceId;
            }
        }

        public bool ErrorOccurred {
            get {
                return this._errorOccurred;
            }
        }

        public Object ResponseContent {
            get {
                return this._responseContent;
            }
        }

        public String ResponseException {
            get {
                return this._responseException;
            }
        }


        //public String DeviceId { get; set; }
        private DateTime _timeStamp = DateTime.Now;
        private string _deviceId = null;
        private string _executor = null;
        private bool _errorOccurred = false;
        private object _responseContent = null;
        private String _responseException = null;


        public static WebApiResponse createResponse(string deviceId, string executor, object response) {
            WebApiResponse result = null;

            try {
                result = new WebApiResponse();
                result._timeStamp = DateTime.Now;
                result._deviceId = deviceId;
                result._executor = executor;

                if (response is Exception) {
                    result._errorOccurred = true;
                    result._responseContent = null;
                    result._responseException = ((Exception)response).Message;
                } else {
                    result._errorOccurred = false;
                    result._responseContent = response;
                    result._responseException = null;
                }

               
            } catch (Exception ex) {
                result._timeStamp = DateTime.Now;
                result._deviceId = deviceId;
                result._executor = executor;
                result._errorOccurred = true;
                result._responseContent = null;
                result._responseException = ((Exception)response).StackTrace;
            }

            return result;
        }

        public static WebApiResponse createResponse(string executor, object response) {
            WebApiResponse result = null;

            try {
                result = new WebApiResponse();
                result._timeStamp = DateTime.Now;
                result._deviceId = null;
                result._executor = executor;

                if (response is Exception) {
                    result._errorOccurred = true;
                    result._responseContent = null;
                    result._responseException = ((Exception)response).Message;
                } else {
                    result._errorOccurred = false;
                    result._responseContent = response;
                    result._responseException = null;
                }


            } catch (Exception ex) {
                result._timeStamp = DateTime.Now;
                result._deviceId = null;
                result._executor = executor;
                result._errorOccurred = true;
                result._responseContent = null;
                result._responseException = ((Exception)response).StackTrace;
            }

            return result;
        }
    }

tutte le mie richieste mi restituiscono in formato json una rappresentazione di questa classe.
Fatto questo e verificato con un client tipo postmand che la chiamata si comporta come dovrebbe, passiamo alla parte android
Ciao
P
« Ultima modifica: 04 Dicembre 2017, 17:42:11 CET da berpao »

Offline ridaria

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    huawei
  • Sistema operativo:
    windows 7
Re:Lettura dati su database remoto con app android
« Risposta #8 il: Ieri alle 19:03 »
0
Ok GRAZIE

il web service lo ho creato e mi restituisce un valore Json:

{TOTALE:570,2,TotVendita:387,totConsig:183,2}

Da qui puoi vedere il risultato direttamente.
http://www.prezyparrucchieri.com/amministrazione/prova.aspx

è corretto fin qui?

GRAZIE


Offline capitancooker

  • Utente junior
  • **
  • Post: 115
  • Marco
  • Respect: +10
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Sistema operativo:
    macOS High Sierra
Re:Lettura dati su database remoto con app android
« Risposta #9 il: Ieri alle 20:43 »
0
Ciao, mi intrometto per rispondere direttamente alla tua domanda. Il Json non è corretto, sia per forma che per contenuto.
I campi vanno racchiusi tra virgolette, i decimali indicati con un punto, ma soprattutto il content-type del documento deve essere praticamente un file di testo (application/json) e non un html.
Quello che riceve android dopo una chiamata all'url che hai indicato è questo:
Codice (Java): [Seleziona]
{TOTALE:606,2,TotVendita:399,totConsig:207,2}

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>

</title></head>
<body>
    <form name="form1" method="post" action="prova.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE2MTY2ODcyMjlkZBUOMnAFpXop9v9pCRfdMIW85lb4" />
</div>

<div>

        <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="81902F7F" />
</div>
    <div>
   
    </div>
    </form>
</body>
</html>

mentre deve essere così (e il content-type "application/json")
Codice (Java): [Seleziona]
{"TOTALE":570.2,"TotVendita":387,"totConsig":183.2}
Ti suggerisco i usare tools di controllo delle chiamate http come Postman https://www.getpostman.com/postman che ti analizza in dettaglio il risultato, così non perdi tempo dopo a capire perché non ti funziona nell'app.

Ciao,
Marco
« Ultima modifica: Ieri alle 20:45 da capitancooker »
Se sbaglio, correggetemi.

Offline berpao

  • Utente junior
  • **
  • Post: 89
  • Respect: +5
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2
  • Play Store ID:
    Paolo Bersan
Re:Lettura dati su database remoto con app android
« Risposta #10 il: Oggi alle 08:03 »
0
Ciao, concordo con quanto scritto da Marco. Aggiungo inoltre che il JSon non c'è bisogno che lo crei tu, esistono delle classi anche per .net che ti permette di serializzare un oggetto in formato json, producendo un risultato formalmente corretto. Non impazzire dietro la generazione del Json. Quello che uso io è JSon.Net della newtonsoft che puoi installare anche tramite nuget come dice qui
Inoltre, se ti retituisce l'html insieme al json c'è qualcosa che non va lato server; ricorda che la pagina deve restituire un content type di tipo application/json, come evidenziato da Marco, e non text/html che dovrebbe essere il default.
Ciao
P

Post unito: [time]12 Dicembre 2017, 08:30:37 CET[/time]
Ciao, aggiungo un link di SO dove viene spiegato come farsi restituire un json da un web service se usi i Web forms

Eccolo

Ciao
P
« Ultima modifica: Oggi alle 12:20 da berpao, Reason: Merged DoublePost »