SlideShare ist ein Scribd-Unternehmen logo
1 von 24
MOBILE APPS con ANDROIDMOBILE APPS con ANDROID
Wor kshops 2014Wor kshops 2014
MESSINAMESSINA –– Libreria Colapesce, viaLibreria Colapesce, via - 12- 12/07/2014/07/2014
LUIGI DE FRANCESCOLUIGI DE FRANCESCO
Studente in Ingegneria Informatica e delle Telecomunicazioni D.M.Studente in Ingegneria Informatica e delle Telecomunicazioni D.M.
509.509.
Lavoratore presso Negg S.r.l. Come sviluppatore Desktop in Qt eLavoratore presso Negg S.r.l. Come sviluppatore Desktop in Qt e
Mobile Android.Mobile Android.
Da sempre appassionato di Informatica. All'attivo le mie conoscenzeDa sempre appassionato di Informatica. All'attivo le mie conoscenze
sui linguaggio annoverano:sui linguaggio annoverano:
Qt, Java, Android, XML, JSON, Javascript, jQuery, MySQL, HTML5,Qt, Java, Android, XML, JSON, Javascript, jQuery, MySQL, HTML5,
CSS3, C, C++CSS3, C, C++
LUIGI DE FRANCESCOLUIGI DE FRANCESCO
https://twitter.com/tux_prohttps://twitter.com/tux_pro
https://it.linkedin.com/in/luigi.defrancescohttps://it.linkedin.com/in/luigi.defrancesco
https://twitter.com/tux_prohttps://twitter.com/tux_pro
luigi.defrancesco89@gmail.comluigi.defrancesco89@gmail.com
Sviluppare un App AndroidSviluppare un App Android
Per sviluppare Applicazioni Mobile Android, occorre conoscerePer sviluppare Applicazioni Mobile Android, occorre conoscere
/avere:/avere:
 Java ( nello specifico bisogna sapere come gestire iJava ( nello specifico bisogna sapere come gestire i
vettori di dati, come gestire le classi, come funzionano ivettori di dati, come gestire le classi, come funzionano i
linguaggi orientati agli oggetti, come funzionano e cosalinguaggi orientati agli oggetti, come funzionano e cosa
sono i thread )sono i thread )
 XML ( per gestire al meglio le GUI )XML ( per gestire al meglio le GUI )
 Concetti base sul framework Android ( Per capire come farConcetti base sul framework Android ( Per capire come far
interagire al meglio l'utente finale con l'app )interagire al meglio l'utente finale con l'app )
 Un ambiente di sviluppo come ECLIPSE + SDK Android,Un ambiente di sviluppo come ECLIPSE + SDK Android,
Android Studio, ecc...Android Studio, ecc...
 Tanta PAZIENZA!!Tanta PAZIENZA!!
Testare un App AndroidTestare un App Android
Una volta realizzata la nostra App, è indispensabile provarla.Una volta realizzata la nostra App, è indispensabile provarla.
Le modalità di debug (individuazione di errori e test diLe modalità di debug (individuazione di errori e test di
funzionalità dell'app ) sono due:funzionalità dell'app ) sono due:
 AVD ( Android Virtual Device ) è un dispositivo virtuale che può essereAVD ( Android Virtual Device ) è un dispositivo virtuale che può essere
creato dall'SDK Android che possiamo scaricare dal sito, e checreato dall'SDK Android che possiamo scaricare dal sito, e che
provvedere a dare a chi non ha un cellulare/tablet android, di poterloprovvedere a dare a chi non ha un cellulare/tablet android, di poterlo
emulare sul proprio computer. Svantaggi? Lentezza, Funzionalità, è unemulare sul proprio computer. Svantaggi? Lentezza, Funzionalità, è un
dispositivo Virtuale che però non virtualizza i problemi dei dispositividispositivo Virtuale che però non virtualizza i problemi dei dispositivi
reali.reali.
 Device Android Fisico: in questa modalità basta abilitareDevice Android Fisico: in questa modalità basta abilitare
la modalità debug sul telefonino (Impostazioni->Opzionila modalità debug sul telefonino (Impostazioni->Opzioni
Sviluppatore->Debug USB), e collegare il dispositivoSviluppatore->Debug USB), e collegare il dispositivo
fisico al PC. Eclipse si accorgerà del device androidfisico al PC. Eclipse si accorgerà del device android
collegato ed installare l'app sul telefonino.collegato ed installare l'app sul telefonino.
Individuare iBugIndividuare iBug
Una volta installata ed avviata l'app sul dispositivo, èUna volta installata ed avviata l'app sul dispositivo, è
scientificamente comprovato che, a seconda del grado di complessitàscientificamente comprovato che, a seconda del grado di complessità
dell'app, si possano avere uno o più crash.dell'app, si possano avere uno o più crash.
Utilizzando lo strumento LogCat di Eclipse ( aggiunto grazieUtilizzando lo strumento LogCat di Eclipse ( aggiunto grazie
all'SDK Android ), è possibile vedere chi ha generato l'errore edall'SDK Android ), è possibile vedere chi ha generato l'errore ed
il perchè è avvenuto.il perchè è avvenuto.
In pratica ci dirà in quale file java ed a quale riga è presente ilIn pratica ci dirà in quale file java ed a quale riga è presente il
bug, ed il tipo di errore. Uno dei più comuni è ilbug, ed il tipo di errore. Uno dei più comuni è il
NullPointerException.NullPointerException.
Hello Android !Hello Android !
Come ogni linguaggio che si rispetti, cominciamo a scrivere un appCome ogni linguaggio che si rispetti, cominciamo a scrivere un app
che in una label scriva: Hello Android!che in una label scriva: Hello Android!
Per farlo, tramite il tool di disegno messo a disposizione daPer farlo, tramite il tool di disegno messo a disposizione da
Eclipse e dal plugin dell'SDK Android, trasciniamo una TextViewEclipse e dal plugin dell'SDK Android, trasciniamo una TextView
dentro la finestra di Layout. Una volta fatto, andiamo nel codicedentro la finestra di Layout. Una volta fatto, andiamo nel codice
MainActivity.java, e scriviamoMainActivity.java, e scriviamo
TextView testo = (TextView) findViewById(R.id.textView1);TextView testo = (TextView) findViewById(R.id.textView1);
testo.setText(“Hello Android!”);testo.setText(“Hello Android!”);
Segue un Esempio Live.Segue un Esempio Live.
Costruire una GUI – LayoutCostruire una GUI – Layout
Nell'atto di costruire una GUI, è indispensabile conoscere iNell'atto di costruire una GUI, è indispensabile conoscere i
Layout.Layout.
I Layout sono degli strumenti che consentono allo sviluppatoreI Layout sono degli strumenti che consentono allo sviluppatore
l'impostazione grafica di una interfaccia. I principali sono:l'impostazione grafica di una interfaccia. I principali sono:
 RelativeLayout: ovvero i widget da inserire sono posizionati in modoRelativeLayout: ovvero i widget da inserire sono posizionati in modo
relativo, questo significa che non cambiano dinamicamente in base allarelativo, questo significa che non cambiano dinamicamente in base alla
schermata, ma hanno una posizione fissa scelta da noi.schermata, ma hanno una posizione fissa scelta da noi.
 LinearLayout: è un layout lineare, ovvero le posizioni deiLinearLayout: è un layout lineare, ovvero le posizioni dei
widget si auto-riadattano in base alla dimensione dellawidget si auto-riadattano in base alla dimensione della
schermata, in modo da prendere tutto lo spazio possibile.schermata, in modo da prendere tutto lo spazio possibile.
Questi Layout a loro volta si suddividono in Horizontal eQuesti Layout a loro volta si suddividono in Horizontal e
Vertical in base all'orientamento scelto.Vertical in base all'orientamento scelto.
 GridLayout: come dice la parola stessa, si tratta di unGridLayout: come dice la parola stessa, si tratta di un
Layout a Griglia, dove i widget vengono posizionati aLayout a Griglia, dove i widget vengono posizionati a
matrice, di dimensione variabile in base alle esigenze.matrice, di dimensione variabile in base alle esigenze.
Activity ed Intent – Parte 1Activity ed Intent – Parte 1
Qualunque app nello store possiede una o più GUI (finestre) che mostrano, aQualunque app nello store possiede una o più GUI (finestre) che mostrano, a
seconda delle esigenze dell'utente, diverse informazioni.seconda delle esigenze dell'utente, diverse informazioni.
Queste GUI vengono chiamate Activity, ed ognuna di loro è linkata ad una classe cheQueste GUI vengono chiamate Activity, ed ognuna di loro è linkata ad una classe che
estende la classe Activity.estende la classe Activity.
Quando si crea un nuovo progetto, Eclipse aggiunge sempre una Activity cheQuando si crea un nuovo progetto, Eclipse aggiunge sempre una Activity che
chiama MainActivity, l'activity che l'app avvierà per prima.chiama MainActivity, l'activity che l'app avvierà per prima.
Un'Activity viene creata direttamente da Eclipse seguendo i comandi: New->Others-Un'Activity viene creata direttamente da Eclipse seguendo i comandi: New->Others-
>Android->Android Activity, nei menù a seguire ci saranno tutte le opzioni per>Android->Android Activity, nei menù a seguire ci saranno tutte le opzioni per
configurare al meglio l'activity che vi serve.configurare al meglio l'activity che vi serve.
Una volta creata, la classe si presenterà così:Una volta creata, la classe si presenterà così:
Public class MiaActivity extends Activity{Public class MiaActivity extends Activity{
La parola extends, significa che estende la classe Activity, ovvero che ne eredita iLa parola extends, significa che estende la classe Activity, ovvero che ne eredita i
metodi, ed ha il permesso di sovrascriverli.metodi, ed ha il permesso di sovrascriverli.
Activity ed Intent – Parte 2Activity ed Intent – Parte 2
Il metodo più importante da sovrascrivere è il metodo OnCreate che si presenta diIl metodo più importante da sovrascrivere è il metodo OnCreate che si presenta di
solito in questo modo:solito in questo modo:
@Override@Override
protected void onCreate(Bundle savedInstanceState) {protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mia);setContentView(R.layout.activity_mia);
}}
Il comando setContentView, collega la classe ad una GUI che abbiamo creato per laIl comando setContentView, collega la classe ad una GUI che abbiamo creato per la
visualizzazione. Da qui si capisce che tutto il codice che deve comandare levisualizzazione. Da qui si capisce che tutto il codice che deve comandare le
interfacce grafiche deve stare all'interno di questo metodo.interfacce grafiche deve stare all'interno di questo metodo.
Una volta descritto come creare una Activity, è giunto il momento di capire comeUna volta descritto come creare una Activity, è giunto il momento di capire come
avviarla dalla MainActivity.avviarla dalla MainActivity.
Activity ed Intent – Parte 3Activity ed Intent – Parte 3
Supponiamo di avere due Activity:Supponiamo di avere due Activity: MainActivityMainActivity ee MiaActivity, dove laMiaActivity, dove la
prima deve avviare la seconda. Andiamo nel metodo OnCreate di MainActivity eprima deve avviare la seconda. Andiamo nel metodo OnCreate di MainActivity e
scriviamo:scriviamo:
@Override@Override
protected void onCreate(Bundle savedInstanceState) {protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mia);setContentView(R.layout.activity_mia);
Intent miaactivity = new Intent(this, MiaActivity.class);Intent miaactivity = new Intent(this, MiaActivity.class);
startActivity(miaactivity);startActivity(miaactivity);
}}
Il codice che abbiamo visto avvia MiaActivity, per cui un Activity può richiamareIl codice che abbiamo visto avvia MiaActivity, per cui un Activity può richiamare
un'altra Activity, generando così uno Stack (Pila) che conterrà l'ordine di avvio delleun'altra Activity, generando così uno Stack (Pila) che conterrà l'ordine di avvio delle
Activity. L'ordine serve per quando si preme il tasto “BACK” sul telefonino, perActivity. L'ordine serve per quando si preme il tasto “BACK” sul telefonino, per
“tornare indietro” in modo ordinato, tra le activity che sono state avviate.“tornare indietro” in modo ordinato, tra le activity che sono state avviate.
EventiEventi
Se volessimo avviare MiaActivity solo in base all'avvenimento di un “evento”,Se volessimo avviare MiaActivity solo in base all'avvenimento di un “evento”,
avremmo l'opportunità di visualizzare dati anche su MainActivity.avremmo l'opportunità di visualizzare dati anche su MainActivity.
Per esempio MiaActivity potrebbe essere avviata dal click dell'utente su di unPer esempio MiaActivity potrebbe essere avviata dal click dell'utente su di un
pulsante ( Button ) in tal caso, dopo aver creato la GUI, basta scrivere nel metodopulsante ( Button ) in tal caso, dopo aver creato la GUI, basta scrivere nel metodo
OnCreate:OnCreate:
Button btn = (Button) findViewById(R.id.Button1);Button btn = (Button) findViewById(R.id.Button1);
Btn.setOnClickListener(new OnClickListener(){Btn.setOnClickListener(new OnClickListener(){
@Override@Override
public void onClick(View v){public void onClick(View v){
Intent miaactivity = new Intent(this, MiaActivity.class);Intent miaactivity = new Intent(this, MiaActivity.class);
startActivity(miaactivity);startActivity(miaactivity);
}}
});});
Passaggio di Parametri tra Activity - IntentPassaggio di Parametri tra Activity - Intent
Essendo che una Activity è una classe, è possibile passare dei parametri tra unaEssendo che una Activity è una classe, è possibile passare dei parametri tra una
classe ed un altra. I metodi per trasferire dati sono due, una sfrutta gli intent, e l'altraclasse ed un altra. I metodi per trasferire dati sono due, una sfrutta gli intent, e l'altra
sfrutta una delle proprietà delle classi.sfrutta una delle proprietà delle classi.
INTENTINTENT
Per trasferire dati da una Activity ad un altra basta scrivere il seguente codice:Per trasferire dati da una Activity ad un altra basta scrivere il seguente codice:
Intent miaActivity = new Intent(this, MiaActivity.class);Intent miaActivity = new Intent(this, MiaActivity.class);
miaActivity.putStringExtra(“valore1”, “ciao”);miaActivity.putStringExtra(“valore1”, “ciao”);
startActivity(miaActivity);startActivity(miaActivity);
Nel metodo onCreate di MiaAcitivity possiamo leggere il valore di cui sopra cosìNel metodo onCreate di MiaAcitivity possiamo leggere il valore di cui sopra così
String valore1 = getIntent().getStringExtra(“valore1”);String valore1 = getIntent().getStringExtra(“valore1”);
In questo modo si possono passare facilmente i valori da una Activity ad un altra.In questo modo si possono passare facilmente i valori da una Activity ad un altra.
Passaggio di Parametri tra Activity - ClassiPassaggio di Parametri tra Activity - Classi
Il metodo che sfrutta le proprietà delle classi, è un metodo sviluppato da me perIl metodo che sfrutta le proprietà delle classi, è un metodo sviluppato da me per
aumentare la stabilità delle app, sfrutta i principi di visibilità publica dei metodi delleaumentare la stabilità delle app, sfrutta i principi di visibilità publica dei metodi delle
classi. In pratica consiste nel creare un metodo GET (che chiameremo getValore() ) ilclassi. In pratica consiste nel creare un metodo GET (che chiameremo getValore() ) il
quale restituisca la variabile di nostro interesse, per poi riprenderlo nell'activityquale restituisca la variabile di nostro interesse, per poi riprenderlo nell'activity
MiaActivity. Un esempio pratico:MiaActivity. Un esempio pratico:
- MainActivity- MainActivity
Si dichiare globalmente la variabileSi dichiare globalmente la variabile
public static String valore1;public static String valore1;
Nel metodo del button, al posto del putStringExtra si scriveNel metodo del button, al posto del putStringExtra si scrive
valore1 = “ciao”;valore1 = “ciao”;
- MiaActivity- MiaActivity
String valoreLetto = MainActivity.getValore();String valoreLetto = MainActivity.getValore();
ManifestManifest
Il file Manifest, da non sottovalutare, è il manifesto dell'app. In esso sono presenti:Il file Manifest, da non sottovalutare, è il manifesto dell'app. In esso sono presenti:
-- Impostazioni delle versioni di Android dove l'app può essere installataImpostazioni delle versioni di Android dove l'app può essere installata
-- Impostazione dello style dell'appImpostazione dello style dell'app
-- Lista permessi che l'app android può avereLista permessi che l'app android può avere
-- Lista delle Activity presenti e loro interazioneLista delle Activity presenti e loro interazione
-- Impostazione Activity di avvioImpostazione Activity di avvio
-- Impostazione dell'orientamento dell'app ( Potrait – Landscape )Impostazione dell'orientamento dell'app ( Potrait – Landscape )
Per chiarire meglio la questione dei permessi. Le app, per obbligo di privacy siaPer chiarire meglio la questione dei permessi. Le app, per obbligo di privacy sia
dell'utente che dello sviluppatore, descrive esattamente ciò che andrà a fare. Peròdell'utente che dello sviluppatore, descrive esattamente ciò che andrà a fare. Però
per le funzioni relative alla gestione dei dati utenti e delle periferiche, l'app ha bisonoper le funzioni relative alla gestione dei dati utenti e delle periferiche, l'app ha bisono
di essere abilitata alla gestione. Per farlo richiede dei permessi che il sistemadi essere abilitata alla gestione. Per farlo richiede dei permessi che il sistema
operativo mette a disposizione per le app.operativo mette a disposizione per le app.
In questo modo l'accesso ai dati è controllato, per cui se qualche App conIn questo modo l'accesso ai dati è controllato, per cui se qualche App con
descrizione fatiscente, dice che può accedere ai vostri dati, state attenti, perchèdescrizione fatiscente, dice che può accedere ai vostri dati, state attenti, perchè
potrebbe rubarvi tutte le vostre foto, messaggi, ecc....potrebbe rubarvi tutte le vostre foto, messaggi, ecc....
Ottenere dati da ServerOttenere dati da Server
Nelle varie commissioni che si potrebbero ottenere, circa il 98% necessita di unaNelle varie commissioni che si potrebbero ottenere, circa il 98% necessita di una
connessione al server del committente per poter fare il retrieve dei dati daconnessione al server del committente per poter fare il retrieve dei dati da
visualizzare nell'app e per impostare delle azioni lato server.visualizzare nell'app e per impostare delle azioni lato server.
Android impedisce nel MainThread ( chiamato UiThread ) di poter effettuareAndroid impedisce nel MainThread ( chiamato UiThread ) di poter effettuare
connessioni o richieste Http. Per ovviare a questo problema, si utilizzano i Threadconnessioni o richieste Http. Per ovviare a questo problema, si utilizzano i Thread
oppure gli AsyncTask.oppure gli AsyncTask.
Però qui giunge un nuovo problema, ovvero che Android impedisce ai thread diPerò qui giunge un nuovo problema, ovvero che Android impedisce ai thread di
poter gestire direttamente gli elementi grafici, per poterlo fare bisogna utilizzare inpoter gestire direttamente gli elementi grafici, per poterlo fare bisogna utilizzare in
modo efficare un metodo ( all'interno del thread ) chiamato runOnUiThread chemodo efficare un metodo ( all'interno del thread ) chiamato runOnUiThread che
spesso porta a problematiche maggiori.spesso porta a problematiche maggiori.
Il mio consiglio è quello di utilizzare gli AsyncTask.Il mio consiglio è quello di utilizzare gli AsyncTask.
Ottenere dati da Server - AsyncTaskOttenere dati da Server - AsyncTask
Consiglio gli AsyncTask perchè da una sola classe è possibile gestire sia il thread inConsiglio gli AsyncTask perchè da una sola classe è possibile gestire sia il thread in
background, che gli elementi grafici, infatti la classe si definisce così:background, che gli elementi grafici, infatti la classe si definisce così:
private class LongOperation extends AsyncTask<String, Void, String> {private class LongOperation extends AsyncTask<String, Void, String> {
@Override@Override
protected String doInBackground(String... params) {protected String doInBackground(String... params) {
// codice per la connessione http// codice per la connessione http
return null;return null;
}}
@Override@Override
protected void onPostExecute(String result) {protected void onPostExecute(String result) {
// Codice per gestire la GUI// Codice per gestire la GUI
}}
Ottenere datida Server – XML vs JSONOttenere datida Server – XML vs JSON
Una volta capito come collegarci al server, occorre capire come formattare i dati alUna volta capito come collegarci al server, occorre capire come formattare i dati al
fine di poter leggere correttamente i valori ricevuti e poterli interpretare.fine di poter leggere correttamente i valori ricevuti e poterli interpretare.
I formati di testo utilizzati per dare una semantica ai dati provenienti dal server sonoI formati di testo utilizzati per dare una semantica ai dati provenienti dal server sono
XML e JSON. Di seguito un esempio dei due:XML e JSON. Di seguito un esempio dei due:
<person>
<age>12</age>
<name>Danielle</name>
</person>
{
"age" : 12,
"name" : "Danielle"
}
Qual è meglio usare. Ci sono diverse filosofie, ma è stato generalmente riconosciutoQual è meglio usare. Ci sono diverse filosofie, ma è stato generalmente riconosciuto
come migliore il JSON. I motivi sono molteplici, è maggiormente Human Readable, ecome migliore il JSON. I motivi sono molteplici, è maggiormente Human Readable, e
l'azione di parsing ( retrieve del dato rispetto ad un valore e ad una semantical'azione di parsing ( retrieve del dato rispetto ad un valore e ad una semantica
precisa ) avviene in tempi brevi.precisa ) avviene in tempi brevi.
L'XML è generalmente più complesso da leggere, e per i cellualri, la suaL'XML è generalmente più complesso da leggere, e per i cellualri, la sua
elaborazione resta un po' pesante da gestire da parte del processore.elaborazione resta un po' pesante da gestire da parte del processore.
Sviluppare un Progetto - App RubricaSviluppare un Progetto - App Rubrica
L'app che avete ricevuto via email è stata progetta a scopo didattico per farvi capireL'app che avete ricevuto via email è stata progetta a scopo didattico per farvi capire
alcuni concetti.alcuni concetti.
Come si comincia un progetto Android? Innanzitutto la fase iniziale è fondamentale.Come si comincia un progetto Android? Innanzitutto la fase iniziale è fondamentale.
Si parla con la parte committente è si seguono alcuni step:Si parla con la parte committente è si seguono alcuni step:
-- Verso chi è orientata l'appVerso chi è orientata l'app
-- A cosa serve l'appA cosa serve l'app
-- Che tipo di servizi deve offrireChe tipo di servizi deve offrire
-- Su quali disposiviti deve essere installabileSu quali disposiviti deve essere installabile
-- In quanto tempo deve essere sviluppataIn quanto tempo deve essere sviluppata
Una volta dato risposta a queste domande, e ad altre qualora ce ne fossero, siUna volta dato risposta a queste domande, e ad altre qualora ce ne fossero, si
stipula, con la parte committente, un allegato tecnico al quale entrambi le parti sistipula, con la parte committente, un allegato tecnico al quale entrambi le parti si
devono attenere. Niente deve essere fatto né in più né in meno rispetto a quantodevono attenere. Niente deve essere fatto né in più né in meno rispetto a quanto
scritto nell'allegato Tecnico.scritto nell'allegato Tecnico.
Sviluppare un Progetto - App RubricaSviluppare un Progetto - App Rubrica
Una volta ottenute le risposte e firmato l'allegato tecnico, si COMINCIA!Una volta ottenute le risposte e firmato l'allegato tecnico, si COMINCIA!
Prendiamo carta e penna e cominciare a buttare giù delle idee sul come gestire ePrendiamo carta e penna e cominciare a buttare giù delle idee sul come gestire e
sviluppare l'app.sviluppare l'app.
La cosa migliore è utilizzare il concetto e la fisolofia di lavoro dell' FTD ( First TimeLa cosa migliore è utilizzare il concetto e la fisolofia di lavoro dell' FTD ( First Time
Development ). Ovvero cercare di suddividere l'app in piccoli problemi, ed una voltaDevelopment ). Ovvero cercare di suddividere l'app in piccoli problemi, ed una volta
individuati creare delle micro-app, che li risolvono poco alla volta. L'unione di questiindividuati creare delle micro-app, che li risolvono poco alla volta. L'unione di questi
problemi creare l'app stabile che poi verrà pubblicata.problemi creare l'app stabile che poi verrà pubblicata.
La fisolofia dell' FTD prende spunto dal concetto di DIVIDE ET IMPERA, ovvero,La fisolofia dell' FTD prende spunto dal concetto di DIVIDE ET IMPERA, ovvero,
dividi ed elaborare, suddividere l'app in micro-app al fine di roslvere tutti i problemidividi ed elaborare, suddividere l'app in micro-app al fine di roslvere tutti i problemi
subito, prevenendo così la generazione di errori la cui individuazione porrebbe deisubito, prevenendo così la generazione di errori la cui individuazione porrebbe dei
problemi.problemi.
Analizziamo l'appAnalizziamo l'app
Sviluppare un Progetto - ConsigliSviluppare un Progetto - Consigli
Nello sviluppare applicazioni, sicuramente non si è esenti dall'avere problemi.Nello sviluppare applicazioni, sicuramente non si è esenti dall'avere problemi.
A cominciare da Eclipse a finire con i propri dispositivi, c'è da diventare matti, peròA cominciare da Eclipse a finire con i propri dispositivi, c'è da diventare matti, però
mantendo la calma ed utilizzando il guru di tutto.... Google ….i problemi possonomantendo la calma ed utilizzando il guru di tutto.... Google ….i problemi possono
sempre essere risolti.sempre essere risolti.
Spesso però ci si trova ad errori o bug che sembrano davvero assurdi, diSpesso però ci si trova ad errori o bug che sembrano davvero assurdi, di
conseguenza la nostra reazione a questi erroriconseguenza la nostra reazione a questi errori
sarà.........................................................................................................................................sarà.........................................................................................................................................
..................................................................................................................
Sviluppare un Progetto - ConsigliSviluppare un Progetto - Consigli
Passato il momento di sconforto, bisogna ricordarsi una famosissima frase di JackPassato il momento di sconforto, bisogna ricordarsi una famosissima frase di Jack
Sparrow:Sparrow:
““Il problema non è il problema, il problema è il tuo atteggiamento nei confronti delIl problema non è il problema, il problema è il tuo atteggiamento nei confronti del
problema, comprendi?”problema, comprendi?”
Conclusionie ConsigliConclusionie Consigli
Per concludere ecco un elenco dei siti da utilizzare al fine di reperire tutte le info chePer concludere ecco un elenco dei siti da utilizzare al fine di reperire tutte le info che
servono per realizzare un app:servono per realizzare un app:
-- www.google.comwww.google.com ( manco a dirlo )( manco a dirlo )
-- stackoverflow.comstackoverflow.com
-- www.androidhive.comwww.androidhive.com (quest'ultimo contiene molteplici tutorial che aiutano(quest'ultimo contiene molteplici tutorial che aiutano
da morire i newbie )da morire i newbie )
GRAZIEGRAZIE!!
https://twitter.com/StrettoDigitalehttps://twitter.com/StrettoDigitale - #glsd- #glsd

Weitere ähnliche Inhalte

Ähnlich wie MOBILE APPS con ANDROID - Lo Stretto Digitale

follow-app BOOTCAMP 3: Android
follow-app BOOTCAMP 3: Androidfollow-app BOOTCAMP 3: Android
follow-app BOOTCAMP 3: Android
QIRIS
 

Ähnlich wie MOBILE APPS con ANDROID - Lo Stretto Digitale (20)

Meet no Neet: presentazione del progetto App per organizzare eventi
Meet no Neet: presentazione del progetto App per organizzare eventiMeet no Neet: presentazione del progetto App per organizzare eventi
Meet no Neet: presentazione del progetto App per organizzare eventi
 
Sviluppo di App cross-platform con Cordova e HTML5
Sviluppo di App cross-platform con Cordova e HTML5Sviluppo di App cross-platform con Cordova e HTML5
Sviluppo di App cross-platform con Cordova e HTML5
 
WhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessiWhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessi
 
follow-app BOOTCAMP 3: Android
follow-app BOOTCAMP 3: Androidfollow-app BOOTCAMP 3: Android
follow-app BOOTCAMP 3: Android
 
Multi-Device Hybrid Apps con Visual Studio e Apache Cordova
Multi-Device Hybrid Apps con Visual Studio e Apache CordovaMulti-Device Hybrid Apps con Visual Studio e Apache Cordova
Multi-Device Hybrid Apps con Visual Studio e Apache Cordova
 
Angular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un frameworkAngular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un framework
 
Introduzione ad Android jug marche meeting 2011_04_30
Introduzione ad Android jug marche meeting 2011_04_30Introduzione ad Android jug marche meeting 2011_04_30
Introduzione ad Android jug marche meeting 2011_04_30
 
Sviluppare app native per iOS
Sviluppare app native per iOSSviluppare app native per iOS
Sviluppare app native per iOS
 
Sviluppare apps native per iOS - Lo Stretto Digitale
Sviluppare apps native per iOS - Lo Stretto DigitaleSviluppare apps native per iOS - Lo Stretto Digitale
Sviluppare apps native per iOS - Lo Stretto Digitale
 
Programmazione mobile: ANDROID
Programmazione mobile: ANDROIDProgrammazione mobile: ANDROID
Programmazione mobile: ANDROID
 
Introduzione al sistema operativo mobile Android
Introduzione al sistema operativo mobile AndroidIntroduzione al sistema operativo mobile Android
Introduzione al sistema operativo mobile Android
 
Applicazioni mobili: strumenti, costi soluzioni e peformance
Applicazioni mobili: strumenti, costi soluzioni e peformanceApplicazioni mobili: strumenti, costi soluzioni e peformance
Applicazioni mobili: strumenti, costi soluzioni e peformance
 
Ecco gli strumenti necessari per sviluppare la tua App Android
Ecco gli strumenti necessari per sviluppare la tua App AndroidEcco gli strumenti necessari per sviluppare la tua App Android
Ecco gli strumenti necessari per sviluppare la tua App Android
 
Introduzione alla programmazione android - Android@tulug lezione 2
Introduzione alla programmazione android - Android@tulug lezione 2Introduzione alla programmazione android - Android@tulug lezione 2
Introduzione alla programmazione android - Android@tulug lezione 2
 
Introduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulugIntroduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulug
 
Android programming
Android programmingAndroid programming
Android programming
 
Introduzione a GAE - Alessandro Aglietti e Lorenzo Bugiani
Introduzione a GAE - Alessandro Aglietti e Lorenzo BugianiIntroduzione a GAE - Alessandro Aglietti e Lorenzo Bugiani
Introduzione a GAE - Alessandro Aglietti e Lorenzo Bugiani
 
Open source un'opportunità di business
Open source un'opportunità di businessOpen source un'opportunità di business
Open source un'opportunità di business
 
Federico Massi.it - Intro alle app mobile Cordova
Federico Massi.it - Intro alle app mobile CordovaFederico Massi.it - Intro alle app mobile Cordova
Federico Massi.it - Intro alle app mobile Cordova
 
01 Android - Introduction
01   Android - Introduction01   Android - Introduction
01 Android - Introduction
 

Mehr von lostrettodigitale

Introduzione al Semantic Web pt. II
Introduzione al Semantic Web pt. IIIntroduzione al Semantic Web pt. II
Introduzione al Semantic Web pt. II
lostrettodigitale
 
"Big Data e vissuto quotidiano" - Andrea Nucita per lo Stretto Digitale
"Big Data e vissuto quotidiano" - Andrea Nucita per lo Stretto Digitale"Big Data e vissuto quotidiano" - Andrea Nucita per lo Stretto Digitale
"Big Data e vissuto quotidiano" - Andrea Nucita per lo Stretto Digitale
lostrettodigitale
 
"Big Data e vissuto quotidiano" - Claudio Camuto per lo Stretto Digitale
"Big Data e vissuto quotidiano" - Claudio Camuto per lo Stretto Digitale"Big Data e vissuto quotidiano" - Claudio Camuto per lo Stretto Digitale
"Big Data e vissuto quotidiano" - Claudio Camuto per lo Stretto Digitale
lostrettodigitale
 
"Big Data e vissuto quotidiano" - Massimo Villari per lo Stretto Digitale
"Big Data e vissuto quotidiano" - Massimo Villari per lo Stretto Digitale"Big Data e vissuto quotidiano" - Massimo Villari per lo Stretto Digitale
"Big Data e vissuto quotidiano" - Massimo Villari per lo Stretto Digitale
lostrettodigitale
 
"Big Data e vissuto quotidiano" - Francesco Micali per Lo Stretto Digitale
"Big Data e vissuto quotidiano" - Francesco Micali per Lo Stretto Digitale"Big Data e vissuto quotidiano" - Francesco Micali per Lo Stretto Digitale
"Big Data e vissuto quotidiano" - Francesco Micali per Lo Stretto Digitale
lostrettodigitale
 
Presentazione lo-stretto-digitale
Presentazione lo-stretto-digitalePresentazione lo-stretto-digitale
Presentazione lo-stretto-digitale
lostrettodigitale
 

Mehr von lostrettodigitale (13)

Lo Stretto Digitale @ Maker DevLab 2015
Lo Stretto Digitale @ Maker DevLab 2015Lo Stretto Digitale @ Maker DevLab 2015
Lo Stretto Digitale @ Maker DevLab 2015
 
Hadoop - Introduzione all’architettura ed approcci applicativi
Hadoop - Introduzione all’architettura ed approcci applicativiHadoop - Introduzione all’architettura ed approcci applicativi
Hadoop - Introduzione all’architettura ed approcci applicativi
 
Progettare e realizzare con Raspberry - Lo stretto digitale
Progettare e realizzare con Raspberry - Lo stretto digitale Progettare e realizzare con Raspberry - Lo stretto digitale
Progettare e realizzare con Raspberry - Lo stretto digitale
 
Mobile Apps con Apache Cordova - Lo Stretto Digitale
Mobile Apps con Apache Cordova - Lo Stretto DigitaleMobile Apps con Apache Cordova - Lo Stretto Digitale
Mobile Apps con Apache Cordova - Lo Stretto Digitale
 
Introduzione al Semantic Web pt. II
Introduzione al Semantic Web pt. IIIntroduzione al Semantic Web pt. II
Introduzione al Semantic Web pt. II
 
Microdata - pillole
Microdata - pilloleMicrodata - pillole
Microdata - pillole
 
CSS* per mobile
CSS* per mobileCSS* per mobile
CSS* per mobile
 
Sviluppo Mobile , quali approcci?
Sviluppo Mobile , quali approcci?Sviluppo Mobile , quali approcci?
Sviluppo Mobile , quali approcci?
 
"Big Data e vissuto quotidiano" - Andrea Nucita per lo Stretto Digitale
"Big Data e vissuto quotidiano" - Andrea Nucita per lo Stretto Digitale"Big Data e vissuto quotidiano" - Andrea Nucita per lo Stretto Digitale
"Big Data e vissuto quotidiano" - Andrea Nucita per lo Stretto Digitale
 
"Big Data e vissuto quotidiano" - Claudio Camuto per lo Stretto Digitale
"Big Data e vissuto quotidiano" - Claudio Camuto per lo Stretto Digitale"Big Data e vissuto quotidiano" - Claudio Camuto per lo Stretto Digitale
"Big Data e vissuto quotidiano" - Claudio Camuto per lo Stretto Digitale
 
"Big Data e vissuto quotidiano" - Massimo Villari per lo Stretto Digitale
"Big Data e vissuto quotidiano" - Massimo Villari per lo Stretto Digitale"Big Data e vissuto quotidiano" - Massimo Villari per lo Stretto Digitale
"Big Data e vissuto quotidiano" - Massimo Villari per lo Stretto Digitale
 
"Big Data e vissuto quotidiano" - Francesco Micali per Lo Stretto Digitale
"Big Data e vissuto quotidiano" - Francesco Micali per Lo Stretto Digitale"Big Data e vissuto quotidiano" - Francesco Micali per Lo Stretto Digitale
"Big Data e vissuto quotidiano" - Francesco Micali per Lo Stretto Digitale
 
Presentazione lo-stretto-digitale
Presentazione lo-stretto-digitalePresentazione lo-stretto-digitale
Presentazione lo-stretto-digitale
 

MOBILE APPS con ANDROID - Lo Stretto Digitale

  • 1. MOBILE APPS con ANDROIDMOBILE APPS con ANDROID Wor kshops 2014Wor kshops 2014 MESSINAMESSINA –– Libreria Colapesce, viaLibreria Colapesce, via - 12- 12/07/2014/07/2014
  • 2. LUIGI DE FRANCESCOLUIGI DE FRANCESCO Studente in Ingegneria Informatica e delle Telecomunicazioni D.M.Studente in Ingegneria Informatica e delle Telecomunicazioni D.M. 509.509. Lavoratore presso Negg S.r.l. Come sviluppatore Desktop in Qt eLavoratore presso Negg S.r.l. Come sviluppatore Desktop in Qt e Mobile Android.Mobile Android. Da sempre appassionato di Informatica. All'attivo le mie conoscenzeDa sempre appassionato di Informatica. All'attivo le mie conoscenze sui linguaggio annoverano:sui linguaggio annoverano: Qt, Java, Android, XML, JSON, Javascript, jQuery, MySQL, HTML5,Qt, Java, Android, XML, JSON, Javascript, jQuery, MySQL, HTML5, CSS3, C, C++CSS3, C, C++
  • 3. LUIGI DE FRANCESCOLUIGI DE FRANCESCO https://twitter.com/tux_prohttps://twitter.com/tux_pro https://it.linkedin.com/in/luigi.defrancescohttps://it.linkedin.com/in/luigi.defrancesco https://twitter.com/tux_prohttps://twitter.com/tux_pro luigi.defrancesco89@gmail.comluigi.defrancesco89@gmail.com
  • 4. Sviluppare un App AndroidSviluppare un App Android Per sviluppare Applicazioni Mobile Android, occorre conoscerePer sviluppare Applicazioni Mobile Android, occorre conoscere /avere:/avere:  Java ( nello specifico bisogna sapere come gestire iJava ( nello specifico bisogna sapere come gestire i vettori di dati, come gestire le classi, come funzionano ivettori di dati, come gestire le classi, come funzionano i linguaggi orientati agli oggetti, come funzionano e cosalinguaggi orientati agli oggetti, come funzionano e cosa sono i thread )sono i thread )  XML ( per gestire al meglio le GUI )XML ( per gestire al meglio le GUI )  Concetti base sul framework Android ( Per capire come farConcetti base sul framework Android ( Per capire come far interagire al meglio l'utente finale con l'app )interagire al meglio l'utente finale con l'app )  Un ambiente di sviluppo come ECLIPSE + SDK Android,Un ambiente di sviluppo come ECLIPSE + SDK Android, Android Studio, ecc...Android Studio, ecc...  Tanta PAZIENZA!!Tanta PAZIENZA!!
  • 5. Testare un App AndroidTestare un App Android Una volta realizzata la nostra App, è indispensabile provarla.Una volta realizzata la nostra App, è indispensabile provarla. Le modalità di debug (individuazione di errori e test diLe modalità di debug (individuazione di errori e test di funzionalità dell'app ) sono due:funzionalità dell'app ) sono due:  AVD ( Android Virtual Device ) è un dispositivo virtuale che può essereAVD ( Android Virtual Device ) è un dispositivo virtuale che può essere creato dall'SDK Android che possiamo scaricare dal sito, e checreato dall'SDK Android che possiamo scaricare dal sito, e che provvedere a dare a chi non ha un cellulare/tablet android, di poterloprovvedere a dare a chi non ha un cellulare/tablet android, di poterlo emulare sul proprio computer. Svantaggi? Lentezza, Funzionalità, è unemulare sul proprio computer. Svantaggi? Lentezza, Funzionalità, è un dispositivo Virtuale che però non virtualizza i problemi dei dispositividispositivo Virtuale che però non virtualizza i problemi dei dispositivi reali.reali.  Device Android Fisico: in questa modalità basta abilitareDevice Android Fisico: in questa modalità basta abilitare la modalità debug sul telefonino (Impostazioni->Opzionila modalità debug sul telefonino (Impostazioni->Opzioni Sviluppatore->Debug USB), e collegare il dispositivoSviluppatore->Debug USB), e collegare il dispositivo fisico al PC. Eclipse si accorgerà del device androidfisico al PC. Eclipse si accorgerà del device android collegato ed installare l'app sul telefonino.collegato ed installare l'app sul telefonino.
  • 6. Individuare iBugIndividuare iBug Una volta installata ed avviata l'app sul dispositivo, èUna volta installata ed avviata l'app sul dispositivo, è scientificamente comprovato che, a seconda del grado di complessitàscientificamente comprovato che, a seconda del grado di complessità dell'app, si possano avere uno o più crash.dell'app, si possano avere uno o più crash. Utilizzando lo strumento LogCat di Eclipse ( aggiunto grazieUtilizzando lo strumento LogCat di Eclipse ( aggiunto grazie all'SDK Android ), è possibile vedere chi ha generato l'errore edall'SDK Android ), è possibile vedere chi ha generato l'errore ed il perchè è avvenuto.il perchè è avvenuto. In pratica ci dirà in quale file java ed a quale riga è presente ilIn pratica ci dirà in quale file java ed a quale riga è presente il bug, ed il tipo di errore. Uno dei più comuni è ilbug, ed il tipo di errore. Uno dei più comuni è il NullPointerException.NullPointerException.
  • 7. Hello Android !Hello Android ! Come ogni linguaggio che si rispetti, cominciamo a scrivere un appCome ogni linguaggio che si rispetti, cominciamo a scrivere un app che in una label scriva: Hello Android!che in una label scriva: Hello Android! Per farlo, tramite il tool di disegno messo a disposizione daPer farlo, tramite il tool di disegno messo a disposizione da Eclipse e dal plugin dell'SDK Android, trasciniamo una TextViewEclipse e dal plugin dell'SDK Android, trasciniamo una TextView dentro la finestra di Layout. Una volta fatto, andiamo nel codicedentro la finestra di Layout. Una volta fatto, andiamo nel codice MainActivity.java, e scriviamoMainActivity.java, e scriviamo TextView testo = (TextView) findViewById(R.id.textView1);TextView testo = (TextView) findViewById(R.id.textView1); testo.setText(“Hello Android!”);testo.setText(“Hello Android!”); Segue un Esempio Live.Segue un Esempio Live.
  • 8. Costruire una GUI – LayoutCostruire una GUI – Layout Nell'atto di costruire una GUI, è indispensabile conoscere iNell'atto di costruire una GUI, è indispensabile conoscere i Layout.Layout. I Layout sono degli strumenti che consentono allo sviluppatoreI Layout sono degli strumenti che consentono allo sviluppatore l'impostazione grafica di una interfaccia. I principali sono:l'impostazione grafica di una interfaccia. I principali sono:  RelativeLayout: ovvero i widget da inserire sono posizionati in modoRelativeLayout: ovvero i widget da inserire sono posizionati in modo relativo, questo significa che non cambiano dinamicamente in base allarelativo, questo significa che non cambiano dinamicamente in base alla schermata, ma hanno una posizione fissa scelta da noi.schermata, ma hanno una posizione fissa scelta da noi.  LinearLayout: è un layout lineare, ovvero le posizioni deiLinearLayout: è un layout lineare, ovvero le posizioni dei widget si auto-riadattano in base alla dimensione dellawidget si auto-riadattano in base alla dimensione della schermata, in modo da prendere tutto lo spazio possibile.schermata, in modo da prendere tutto lo spazio possibile. Questi Layout a loro volta si suddividono in Horizontal eQuesti Layout a loro volta si suddividono in Horizontal e Vertical in base all'orientamento scelto.Vertical in base all'orientamento scelto.  GridLayout: come dice la parola stessa, si tratta di unGridLayout: come dice la parola stessa, si tratta di un Layout a Griglia, dove i widget vengono posizionati aLayout a Griglia, dove i widget vengono posizionati a matrice, di dimensione variabile in base alle esigenze.matrice, di dimensione variabile in base alle esigenze.
  • 9. Activity ed Intent – Parte 1Activity ed Intent – Parte 1 Qualunque app nello store possiede una o più GUI (finestre) che mostrano, aQualunque app nello store possiede una o più GUI (finestre) che mostrano, a seconda delle esigenze dell'utente, diverse informazioni.seconda delle esigenze dell'utente, diverse informazioni. Queste GUI vengono chiamate Activity, ed ognuna di loro è linkata ad una classe cheQueste GUI vengono chiamate Activity, ed ognuna di loro è linkata ad una classe che estende la classe Activity.estende la classe Activity. Quando si crea un nuovo progetto, Eclipse aggiunge sempre una Activity cheQuando si crea un nuovo progetto, Eclipse aggiunge sempre una Activity che chiama MainActivity, l'activity che l'app avvierà per prima.chiama MainActivity, l'activity che l'app avvierà per prima. Un'Activity viene creata direttamente da Eclipse seguendo i comandi: New->Others-Un'Activity viene creata direttamente da Eclipse seguendo i comandi: New->Others- >Android->Android Activity, nei menù a seguire ci saranno tutte le opzioni per>Android->Android Activity, nei menù a seguire ci saranno tutte le opzioni per configurare al meglio l'activity che vi serve.configurare al meglio l'activity che vi serve. Una volta creata, la classe si presenterà così:Una volta creata, la classe si presenterà così: Public class MiaActivity extends Activity{Public class MiaActivity extends Activity{ La parola extends, significa che estende la classe Activity, ovvero che ne eredita iLa parola extends, significa che estende la classe Activity, ovvero che ne eredita i metodi, ed ha il permesso di sovrascriverli.metodi, ed ha il permesso di sovrascriverli.
  • 10. Activity ed Intent – Parte 2Activity ed Intent – Parte 2 Il metodo più importante da sovrascrivere è il metodo OnCreate che si presenta diIl metodo più importante da sovrascrivere è il metodo OnCreate che si presenta di solito in questo modo:solito in questo modo: @Override@Override protected void onCreate(Bundle savedInstanceState) {protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);super.onCreate(savedInstanceState); setContentView(R.layout.activity_mia);setContentView(R.layout.activity_mia); }} Il comando setContentView, collega la classe ad una GUI che abbiamo creato per laIl comando setContentView, collega la classe ad una GUI che abbiamo creato per la visualizzazione. Da qui si capisce che tutto il codice che deve comandare levisualizzazione. Da qui si capisce che tutto il codice che deve comandare le interfacce grafiche deve stare all'interno di questo metodo.interfacce grafiche deve stare all'interno di questo metodo. Una volta descritto come creare una Activity, è giunto il momento di capire comeUna volta descritto come creare una Activity, è giunto il momento di capire come avviarla dalla MainActivity.avviarla dalla MainActivity.
  • 11. Activity ed Intent – Parte 3Activity ed Intent – Parte 3 Supponiamo di avere due Activity:Supponiamo di avere due Activity: MainActivityMainActivity ee MiaActivity, dove laMiaActivity, dove la prima deve avviare la seconda. Andiamo nel metodo OnCreate di MainActivity eprima deve avviare la seconda. Andiamo nel metodo OnCreate di MainActivity e scriviamo:scriviamo: @Override@Override protected void onCreate(Bundle savedInstanceState) {protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);super.onCreate(savedInstanceState); setContentView(R.layout.activity_mia);setContentView(R.layout.activity_mia); Intent miaactivity = new Intent(this, MiaActivity.class);Intent miaactivity = new Intent(this, MiaActivity.class); startActivity(miaactivity);startActivity(miaactivity); }} Il codice che abbiamo visto avvia MiaActivity, per cui un Activity può richiamareIl codice che abbiamo visto avvia MiaActivity, per cui un Activity può richiamare un'altra Activity, generando così uno Stack (Pila) che conterrà l'ordine di avvio delleun'altra Activity, generando così uno Stack (Pila) che conterrà l'ordine di avvio delle Activity. L'ordine serve per quando si preme il tasto “BACK” sul telefonino, perActivity. L'ordine serve per quando si preme il tasto “BACK” sul telefonino, per “tornare indietro” in modo ordinato, tra le activity che sono state avviate.“tornare indietro” in modo ordinato, tra le activity che sono state avviate.
  • 12. EventiEventi Se volessimo avviare MiaActivity solo in base all'avvenimento di un “evento”,Se volessimo avviare MiaActivity solo in base all'avvenimento di un “evento”, avremmo l'opportunità di visualizzare dati anche su MainActivity.avremmo l'opportunità di visualizzare dati anche su MainActivity. Per esempio MiaActivity potrebbe essere avviata dal click dell'utente su di unPer esempio MiaActivity potrebbe essere avviata dal click dell'utente su di un pulsante ( Button ) in tal caso, dopo aver creato la GUI, basta scrivere nel metodopulsante ( Button ) in tal caso, dopo aver creato la GUI, basta scrivere nel metodo OnCreate:OnCreate: Button btn = (Button) findViewById(R.id.Button1);Button btn = (Button) findViewById(R.id.Button1); Btn.setOnClickListener(new OnClickListener(){Btn.setOnClickListener(new OnClickListener(){ @Override@Override public void onClick(View v){public void onClick(View v){ Intent miaactivity = new Intent(this, MiaActivity.class);Intent miaactivity = new Intent(this, MiaActivity.class); startActivity(miaactivity);startActivity(miaactivity); }} });});
  • 13. Passaggio di Parametri tra Activity - IntentPassaggio di Parametri tra Activity - Intent Essendo che una Activity è una classe, è possibile passare dei parametri tra unaEssendo che una Activity è una classe, è possibile passare dei parametri tra una classe ed un altra. I metodi per trasferire dati sono due, una sfrutta gli intent, e l'altraclasse ed un altra. I metodi per trasferire dati sono due, una sfrutta gli intent, e l'altra sfrutta una delle proprietà delle classi.sfrutta una delle proprietà delle classi. INTENTINTENT Per trasferire dati da una Activity ad un altra basta scrivere il seguente codice:Per trasferire dati da una Activity ad un altra basta scrivere il seguente codice: Intent miaActivity = new Intent(this, MiaActivity.class);Intent miaActivity = new Intent(this, MiaActivity.class); miaActivity.putStringExtra(“valore1”, “ciao”);miaActivity.putStringExtra(“valore1”, “ciao”); startActivity(miaActivity);startActivity(miaActivity); Nel metodo onCreate di MiaAcitivity possiamo leggere il valore di cui sopra cosìNel metodo onCreate di MiaAcitivity possiamo leggere il valore di cui sopra così String valore1 = getIntent().getStringExtra(“valore1”);String valore1 = getIntent().getStringExtra(“valore1”); In questo modo si possono passare facilmente i valori da una Activity ad un altra.In questo modo si possono passare facilmente i valori da una Activity ad un altra.
  • 14. Passaggio di Parametri tra Activity - ClassiPassaggio di Parametri tra Activity - Classi Il metodo che sfrutta le proprietà delle classi, è un metodo sviluppato da me perIl metodo che sfrutta le proprietà delle classi, è un metodo sviluppato da me per aumentare la stabilità delle app, sfrutta i principi di visibilità publica dei metodi delleaumentare la stabilità delle app, sfrutta i principi di visibilità publica dei metodi delle classi. In pratica consiste nel creare un metodo GET (che chiameremo getValore() ) ilclassi. In pratica consiste nel creare un metodo GET (che chiameremo getValore() ) il quale restituisca la variabile di nostro interesse, per poi riprenderlo nell'activityquale restituisca la variabile di nostro interesse, per poi riprenderlo nell'activity MiaActivity. Un esempio pratico:MiaActivity. Un esempio pratico: - MainActivity- MainActivity Si dichiare globalmente la variabileSi dichiare globalmente la variabile public static String valore1;public static String valore1; Nel metodo del button, al posto del putStringExtra si scriveNel metodo del button, al posto del putStringExtra si scrive valore1 = “ciao”;valore1 = “ciao”; - MiaActivity- MiaActivity String valoreLetto = MainActivity.getValore();String valoreLetto = MainActivity.getValore();
  • 15. ManifestManifest Il file Manifest, da non sottovalutare, è il manifesto dell'app. In esso sono presenti:Il file Manifest, da non sottovalutare, è il manifesto dell'app. In esso sono presenti: -- Impostazioni delle versioni di Android dove l'app può essere installataImpostazioni delle versioni di Android dove l'app può essere installata -- Impostazione dello style dell'appImpostazione dello style dell'app -- Lista permessi che l'app android può avereLista permessi che l'app android può avere -- Lista delle Activity presenti e loro interazioneLista delle Activity presenti e loro interazione -- Impostazione Activity di avvioImpostazione Activity di avvio -- Impostazione dell'orientamento dell'app ( Potrait – Landscape )Impostazione dell'orientamento dell'app ( Potrait – Landscape ) Per chiarire meglio la questione dei permessi. Le app, per obbligo di privacy siaPer chiarire meglio la questione dei permessi. Le app, per obbligo di privacy sia dell'utente che dello sviluppatore, descrive esattamente ciò che andrà a fare. Peròdell'utente che dello sviluppatore, descrive esattamente ciò che andrà a fare. Però per le funzioni relative alla gestione dei dati utenti e delle periferiche, l'app ha bisonoper le funzioni relative alla gestione dei dati utenti e delle periferiche, l'app ha bisono di essere abilitata alla gestione. Per farlo richiede dei permessi che il sistemadi essere abilitata alla gestione. Per farlo richiede dei permessi che il sistema operativo mette a disposizione per le app.operativo mette a disposizione per le app. In questo modo l'accesso ai dati è controllato, per cui se qualche App conIn questo modo l'accesso ai dati è controllato, per cui se qualche App con descrizione fatiscente, dice che può accedere ai vostri dati, state attenti, perchèdescrizione fatiscente, dice che può accedere ai vostri dati, state attenti, perchè potrebbe rubarvi tutte le vostre foto, messaggi, ecc....potrebbe rubarvi tutte le vostre foto, messaggi, ecc....
  • 16. Ottenere dati da ServerOttenere dati da Server Nelle varie commissioni che si potrebbero ottenere, circa il 98% necessita di unaNelle varie commissioni che si potrebbero ottenere, circa il 98% necessita di una connessione al server del committente per poter fare il retrieve dei dati daconnessione al server del committente per poter fare il retrieve dei dati da visualizzare nell'app e per impostare delle azioni lato server.visualizzare nell'app e per impostare delle azioni lato server. Android impedisce nel MainThread ( chiamato UiThread ) di poter effettuareAndroid impedisce nel MainThread ( chiamato UiThread ) di poter effettuare connessioni o richieste Http. Per ovviare a questo problema, si utilizzano i Threadconnessioni o richieste Http. Per ovviare a questo problema, si utilizzano i Thread oppure gli AsyncTask.oppure gli AsyncTask. Però qui giunge un nuovo problema, ovvero che Android impedisce ai thread diPerò qui giunge un nuovo problema, ovvero che Android impedisce ai thread di poter gestire direttamente gli elementi grafici, per poterlo fare bisogna utilizzare inpoter gestire direttamente gli elementi grafici, per poterlo fare bisogna utilizzare in modo efficare un metodo ( all'interno del thread ) chiamato runOnUiThread chemodo efficare un metodo ( all'interno del thread ) chiamato runOnUiThread che spesso porta a problematiche maggiori.spesso porta a problematiche maggiori. Il mio consiglio è quello di utilizzare gli AsyncTask.Il mio consiglio è quello di utilizzare gli AsyncTask.
  • 17. Ottenere dati da Server - AsyncTaskOttenere dati da Server - AsyncTask Consiglio gli AsyncTask perchè da una sola classe è possibile gestire sia il thread inConsiglio gli AsyncTask perchè da una sola classe è possibile gestire sia il thread in background, che gli elementi grafici, infatti la classe si definisce così:background, che gli elementi grafici, infatti la classe si definisce così: private class LongOperation extends AsyncTask<String, Void, String> {private class LongOperation extends AsyncTask<String, Void, String> { @Override@Override protected String doInBackground(String... params) {protected String doInBackground(String... params) { // codice per la connessione http// codice per la connessione http return null;return null; }} @Override@Override protected void onPostExecute(String result) {protected void onPostExecute(String result) { // Codice per gestire la GUI// Codice per gestire la GUI }}
  • 18. Ottenere datida Server – XML vs JSONOttenere datida Server – XML vs JSON Una volta capito come collegarci al server, occorre capire come formattare i dati alUna volta capito come collegarci al server, occorre capire come formattare i dati al fine di poter leggere correttamente i valori ricevuti e poterli interpretare.fine di poter leggere correttamente i valori ricevuti e poterli interpretare. I formati di testo utilizzati per dare una semantica ai dati provenienti dal server sonoI formati di testo utilizzati per dare una semantica ai dati provenienti dal server sono XML e JSON. Di seguito un esempio dei due:XML e JSON. Di seguito un esempio dei due: <person> <age>12</age> <name>Danielle</name> </person> { "age" : 12, "name" : "Danielle" } Qual è meglio usare. Ci sono diverse filosofie, ma è stato generalmente riconosciutoQual è meglio usare. Ci sono diverse filosofie, ma è stato generalmente riconosciuto come migliore il JSON. I motivi sono molteplici, è maggiormente Human Readable, ecome migliore il JSON. I motivi sono molteplici, è maggiormente Human Readable, e l'azione di parsing ( retrieve del dato rispetto ad un valore e ad una semantical'azione di parsing ( retrieve del dato rispetto ad un valore e ad una semantica precisa ) avviene in tempi brevi.precisa ) avviene in tempi brevi. L'XML è generalmente più complesso da leggere, e per i cellualri, la suaL'XML è generalmente più complesso da leggere, e per i cellualri, la sua elaborazione resta un po' pesante da gestire da parte del processore.elaborazione resta un po' pesante da gestire da parte del processore.
  • 19. Sviluppare un Progetto - App RubricaSviluppare un Progetto - App Rubrica L'app che avete ricevuto via email è stata progetta a scopo didattico per farvi capireL'app che avete ricevuto via email è stata progetta a scopo didattico per farvi capire alcuni concetti.alcuni concetti. Come si comincia un progetto Android? Innanzitutto la fase iniziale è fondamentale.Come si comincia un progetto Android? Innanzitutto la fase iniziale è fondamentale. Si parla con la parte committente è si seguono alcuni step:Si parla con la parte committente è si seguono alcuni step: -- Verso chi è orientata l'appVerso chi è orientata l'app -- A cosa serve l'appA cosa serve l'app -- Che tipo di servizi deve offrireChe tipo di servizi deve offrire -- Su quali disposiviti deve essere installabileSu quali disposiviti deve essere installabile -- In quanto tempo deve essere sviluppataIn quanto tempo deve essere sviluppata Una volta dato risposta a queste domande, e ad altre qualora ce ne fossero, siUna volta dato risposta a queste domande, e ad altre qualora ce ne fossero, si stipula, con la parte committente, un allegato tecnico al quale entrambi le parti sistipula, con la parte committente, un allegato tecnico al quale entrambi le parti si devono attenere. Niente deve essere fatto né in più né in meno rispetto a quantodevono attenere. Niente deve essere fatto né in più né in meno rispetto a quanto scritto nell'allegato Tecnico.scritto nell'allegato Tecnico.
  • 20. Sviluppare un Progetto - App RubricaSviluppare un Progetto - App Rubrica Una volta ottenute le risposte e firmato l'allegato tecnico, si COMINCIA!Una volta ottenute le risposte e firmato l'allegato tecnico, si COMINCIA! Prendiamo carta e penna e cominciare a buttare giù delle idee sul come gestire ePrendiamo carta e penna e cominciare a buttare giù delle idee sul come gestire e sviluppare l'app.sviluppare l'app. La cosa migliore è utilizzare il concetto e la fisolofia di lavoro dell' FTD ( First TimeLa cosa migliore è utilizzare il concetto e la fisolofia di lavoro dell' FTD ( First Time Development ). Ovvero cercare di suddividere l'app in piccoli problemi, ed una voltaDevelopment ). Ovvero cercare di suddividere l'app in piccoli problemi, ed una volta individuati creare delle micro-app, che li risolvono poco alla volta. L'unione di questiindividuati creare delle micro-app, che li risolvono poco alla volta. L'unione di questi problemi creare l'app stabile che poi verrà pubblicata.problemi creare l'app stabile che poi verrà pubblicata. La fisolofia dell' FTD prende spunto dal concetto di DIVIDE ET IMPERA, ovvero,La fisolofia dell' FTD prende spunto dal concetto di DIVIDE ET IMPERA, ovvero, dividi ed elaborare, suddividere l'app in micro-app al fine di roslvere tutti i problemidividi ed elaborare, suddividere l'app in micro-app al fine di roslvere tutti i problemi subito, prevenendo così la generazione di errori la cui individuazione porrebbe deisubito, prevenendo così la generazione di errori la cui individuazione porrebbe dei problemi.problemi. Analizziamo l'appAnalizziamo l'app
  • 21. Sviluppare un Progetto - ConsigliSviluppare un Progetto - Consigli Nello sviluppare applicazioni, sicuramente non si è esenti dall'avere problemi.Nello sviluppare applicazioni, sicuramente non si è esenti dall'avere problemi. A cominciare da Eclipse a finire con i propri dispositivi, c'è da diventare matti, peròA cominciare da Eclipse a finire con i propri dispositivi, c'è da diventare matti, però mantendo la calma ed utilizzando il guru di tutto.... Google ….i problemi possonomantendo la calma ed utilizzando il guru di tutto.... Google ….i problemi possono sempre essere risolti.sempre essere risolti. Spesso però ci si trova ad errori o bug che sembrano davvero assurdi, diSpesso però ci si trova ad errori o bug che sembrano davvero assurdi, di conseguenza la nostra reazione a questi erroriconseguenza la nostra reazione a questi errori sarà.........................................................................................................................................sarà......................................................................................................................................... ..................................................................................................................
  • 22. Sviluppare un Progetto - ConsigliSviluppare un Progetto - Consigli Passato il momento di sconforto, bisogna ricordarsi una famosissima frase di JackPassato il momento di sconforto, bisogna ricordarsi una famosissima frase di Jack Sparrow:Sparrow: ““Il problema non è il problema, il problema è il tuo atteggiamento nei confronti delIl problema non è il problema, il problema è il tuo atteggiamento nei confronti del problema, comprendi?”problema, comprendi?”
  • 23. Conclusionie ConsigliConclusionie Consigli Per concludere ecco un elenco dei siti da utilizzare al fine di reperire tutte le info chePer concludere ecco un elenco dei siti da utilizzare al fine di reperire tutte le info che servono per realizzare un app:servono per realizzare un app: -- www.google.comwww.google.com ( manco a dirlo )( manco a dirlo ) -- stackoverflow.comstackoverflow.com -- www.androidhive.comwww.androidhive.com (quest'ultimo contiene molteplici tutorial che aiutano(quest'ultimo contiene molteplici tutorial che aiutano da morire i newbie )da morire i newbie )