Visualizzazione stampabile
-
Basic How to
Ho cercato su molti forum degli how to di base per poter iniziare a capire la programmazione di applicazioni per android...la risposta è sempre la stessa: studiare java.
Premetto che non ho mai lavorato in java, ma ho una piccola base di programmazione, dalle basi scolastiche del vecchio basic, poi pascal e successivo passaggio a c++ (senza l'introduzione agli oggetti, fondamentali in java), per terminare con uno studio approfondito di php e relativa introduzione autodidattica agli oggetti ed al linguaggi di scripting javascript, e qualche cenno di Visual BAsic, per cui, non ho mai programmato in java, ma non sono proprio alle prime prime armi, no?!
Ho installato Eclipse e il plugin di Android, ieri ho seguito il tutorial per il fatidico Hello World e sono rimasto un po'...disorientato...c'è una qualche documentazione che tocchi un po' le basi? Sono daccordo con classi costruttori metodi e quant'altro però sono rimasto un po' spiazzato dall'approccio...grazie in anticipo
-
Eh, la tua richesta è un po generica mi pare..
Che cosa ti ha lasciato "disorientato" ?
-
Quote:
Originariamente inviato da
Andrea
Eh, la tua richesta è un po generica mi pare..
Che cosa ti ha lasciato "disorientato" ?
A dir la verità un po' tutto...ti accontento subito ecco il dettaglio...con relativi commenti che esprimono le mie perplessità da ignorante nonchè newbie ma volenteroso
Codice PHP:
package com.example.helloandroid;
#1. immagino che è obbligatorio definire il nome del software.
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
#2. Queste sono librerie, giusto? Un po' come il C, ma di cosa si occupano??
# Dove trovo i vari metodi? E una lista di tutte le altre librerie create e
# messe a disposizione da AOSP?
public class HelloAndroid extends Activity {
#3. Definisco una classe pubblica di nome HelloAndroid che è un'estensione
# di Activity che presupponto sia ovviamente anch'essa una classe,
# il che significa che HelloAndroid eredita tutti i metodi di Activity,
# giusto??
/** Called when the activity is first created. */
@Override
#4. Questo che roba è?!
public void onCreate(Bundle savedInstanceState) {
#5. in php ad esempio, la funzione costruttrice deve avere lo stesso nome
# dell'intera classe, nel caso di Android invece è d'obbligo che
# il metodo costruttore si chiami onCreate e fin qui nessun problema
# il costruttore in questo caso non deve generare
# nessun risultato (void), è un metodo pubblico (e cos'è un metodo
# pubblico all'interno di una classe? Non deve sempre e comunque essere
# richiamato come metodo dell'oggetto? Tipo nomeOggetto.onCreate?)
# E il "Bundle savedInstanceState" cos'è?
super.onCreate(savedInstanceState);
#6. chi è super? dove è stato definito? Non è un istanza della
# classe, non ho visto in giro una roba tipo
# super = new HelloAndroid, perchè il nome della classe
# è HelloAndroid, ma quando è stato creato un oggetto della
# classe HelloAndroid?
# E poi scusate, ma viene fatto riferimento al metodo
# onCreate direttamente dentro il metodo stesso?!?!
# Che fa chiama se stesso?!
TextView tv = new TextView(this);
#7. bene, qui creo un oggeto "tv" della classe TextView
# e passo come parametro al metodo costruttore questa
# stessa classe (this), ma perchè si deve scrivere
# TextView anche prima? Non basta un:
# tv = new TextView(this);?
tv.setText("Hello, Android");
#8. qui ora è più semplice, passo la stringa "Hello, Android" al
# metodo setText dell'oggetto tv
setContentView(tv);
#9. qui proprio non capisco nulla,setContentView è una funzione
# generica? Non è chiamata come metodo di un oggetto
# anche se viene passato come parametro l'intero oggetto tv.
# e la connessione con il file Xml dove la trovo?
}
}
Se riuscissi a capire questi dettagli nello specifico poi il resto è discesa, spulciare le librerie che sono a disposizione non è un problema, anche la sintassi credo sia specificata da qualche parte...
-
ok, trovate le librerie android.app e android.os che contengono le classi Activity e Bundle, resta tutto il resto (scusate il giro di parole)
-
Tutte le tue richieste sono piu o meno tutte riguardanti a java..
Infatti, tranne per la setContentView tutte le tue domande sono per java. Secondo me ti conviene leggere in giro cos'è un package e come si programma un pochino in java..
Io non ho mai studiato un piffero di java e tral'altro sono riuscito a scrivere codice per android.. Perciò non perdere le speranze.. Ti serve solamente capire come funziona il java..
Inoltre sul sito ufficiale degli sviluppatori android ci sonoa lcuni tutorial che spiegano abbastanza decentemente cosa servono i vari metodi, ci hai dato un occhio?
-
Quote:
Originariamente inviato da
Andrea
Tutte le tue richieste sono piu o meno tutte riguardanti a java..
Infatti, tranne per la setContentView tutte le tue domande sono per java. Secondo me ti conviene leggere in giro cos'è un package e come si programma un pochino in java..
Io non ho mai studiato un piffero di java e tral'altro sono riuscito a scrivere codice per android.. Perciò non perdere le speranze.. Ti serve solamente capire come funziona il java..
Inoltre sul sito ufficiale degli sviluppatori android ci sonoa lcuni tutorial che spiegano abbastanza decentemente cosa servono i vari metodi, ci hai dato un occhio?
Ho visto Hello World, ed è da li che mi sono nate alcune perplessità. Ora sto proseguendo con gli altri tutorial, alcune cose si chiariscono per strada, ma alcuni dei miei dubbi li ho ancora...
-
Quote:
Originariamente inviato da
Andrea
Tutte le tue richieste sono piu o meno tutte riguardanti a java..
Infatti, tranne per la setContentView tutte le tue domande sono per java. Secondo me ti conviene leggere in giro cos'è un package e come si programma un pochino in java..
Io non ho mai studiato un piffero di java e tral'altro sono riuscito a scrivere codice per android.. Perciò non perdere le speranze.. Ti serve solamente capire come funziona il java..
Inoltre sul sito ufficiale degli sviluppatori android ci sonoa lcuni tutorial che spiegano abbastanza decentemente cosa servono i vari metodi, ci hai dato un occhio?
Scusa ma, se non conoscevi minimamente java, poi cosa hai fatto? Lo hai studiato? Da che fonti?
-
Sincermante no l'ho studiato.. Ho imparato semplicemente a tentoni.. Poi ogni tanto mi informavo ( Tipo cercavo su google cosa era un package ecc)
Insomma procedevo a tentativi.. Fa schifo da dire ma non avevo il tempo per studiarmi decentemente java cosi ho deciso di impararlo onthefly
-
Quote:
Originariamente inviato da
Andrea
Sincermante no l'ho studiato.. Ho imparato semplicemente a tentoni.. Poi ogni tanto mi informavo ( Tipo cercavo su google cosa era un package ecc)
Insomma procedevo a tentativi.. Fa schifo da dire ma non avevo il tempo per studiarmi decentemente java cosi ho deciso di impararlo onthefly
io mi sono messo a vedere basi di java, alcune cose si chiariscono molto...altre ancora no...sono un tipo paziente...vediamo come procede...
-
Beh non so se sono ancora in tempo, ma provo a rispondere io alle tue perplessità! Cominciamo in ordine numerico come hai fatto tu :
#1. Il package non è altro che l'insieme di tutte le classi presenti nell'apk.
#2. Non è proprio giusto definirle librerie, potresti usare la stessa definizione usata in c ' #include ', ma sono semplicemente delle altre classi importate nel package della tua apk.
#3. Si giusto.
#4. Un override è un sovrascrittura di un codice già implementato, nel tuo caso stai stai ri-implementando il costruttore della classe Activity, che ovviamente è stato ereditato dalla classe HelloAndroid che estende Activity.
#5. Si è giusto quello che dici, ma java quando è nato ha creato anche delle convenzioni.. per farti capire ad esempio ha detto che tutti i package devono iniziare per lettera minuscola, le classi per lettera maiuscola, ecc ecc.. e in una convenzione dice che tutti i costruttori delle classi devono essere public.
#6. super(); non fa nient'altro che richiamare il costruttore della classe, ad esempio se crei due costruttori di una classe qualsiasi, uno dei quali non riceve alcun parametro e l'altro che riceve due paramentri ad esempio interi, puoi richiamare entrambi i costruttori scrivendo super(); e super(int x, int y); l'interprete (in gergo a volte chiamato compilatore) capisce a tempo di esecuzione di quale costruttore si tratta in base ai parametri passati.
Alla seconda domanda del punto 6 posso semplicemente risponderti in questo modo: hai mai sentito parlare di ricorsione? (scusa se non ti spiego cosa è, ma non è per niente semplice in qualche riga.)
#7. Devi sempre scrivere il tipo dell'oggetto che vuoi creare, quella è come una dichiarazione di una variabile in c, l'interprete deve sapere che oggetto sta utilizzando! Ti faccio capire meglio.. Immagina di avere una superclasse FigureGeometriche e tutte le sue sotto classi Triangolo,Quadrilatero ecc ecc..
Se istanzi un oggetto t = new FigureGeometriche(); (apparte che è sintatticamente scorretto e ti da errore) l'interprete non può sapere di che oggetto ha a che fare, proprio perchè dopo new puoi mettere qualsiasi costruttore delle classi superiori, ma l'oggetto può benissimamente essere un oggetto di qualsiasi sottoclasse. Quindi è corretto scrivere sia: Triangolo t = new FigureGeometriche(); sia: Triangolo t = new Triangolo();. Spero di essere stato chiaro in quest'ultimo passaggio..
#8. Perfetto.
#9. Immagina setContentView come la printf in c. E' una delle tantissime procedure (in gergo a volte chiamate funzioni :P) di java per stampare a video.
Spero di essere stato d'aiuto, sia a te che a qualche altro.
Ciao alla prossima! ;)
-
Di solito in java il costruttore ha il nome della classe ma questa è una classe estesa quindi dobbiamo "adattarci" alla classe madre. La classe madre dice che il metodo che verrà richiamato sarà onCreate.
Dovresti studiare un po' le basi degli oggetti. In php puoi tralasciare il tipo di variabile ecc invece in java deve essere tutto "tipizzato".
i Package se conosci PHP 5.3 (ti faccio esempi su php perchè ho letto che hai approfondito sto linguaggio) sono i namespace come su molto linguaggi.
public e private ( i più usati): Di solito le variabili si dichiarano tutte private e poi crei dei metodi pubblici get and set per le variabili. dichiari un metodo public quando vuoi far accedere dall'esterno della classe e private quando non vuoi ossia: quando vuoi far accedere solo alla classe(es: this.metodo(); )
PS:da php5 (uscito nel 2004 credo) il costruttore è __construct() e non il nome della classe e da php 5.3 sarà obbligatorio fare come java, quindi dichiarare tuti i metodì se saranno pubblici, privati ecc. Ti consiglio di comprarti un libricino di java base dove trovi SICURAMEMTE la base degli oggetti che poi ti servirà per tutti gli altri linguaggi.
Scusa se ho scritto un po' tutto incasinato ma sono di fretta ;)
-
Quote:
Originariamente inviato da
Hitler
Beh non so se sono ancora in tempo, ma provo a rispondere io alle tue perplessità! Cominciamo in ordine numerico come hai fatto tu :
#1. Il package non è altro che l'insieme di tutte le classi presenti nell'apk.
#2. Non è proprio giusto definirle librerie, potresti usare la stessa definizione usata in c ' #include ', ma sono semplicemente delle altre classi importate nel package della tua apk.
#3. Si giusto.
#4. Un override è un sovrascrittura di un codice già implementato, nel tuo caso stai stai ri-implementando il costruttore della classe Activity, che ovviamente è stato ereditato dalla classe HelloAndroid che estende Activity.
#5. Si è giusto quello che dici, ma java quando è nato ha creato anche delle convenzioni.. per farti capire ad esempio ha detto che tutti i package devono iniziare per lettera minuscola, le classi per lettera maiuscola, ecc ecc.. e in una convenzione dice che tutti i costruttori delle classi devono essere public.
#6. super(); non fa nient'altro che richiamare il costruttore della classe, ad esempio se crei due costruttori di una classe qualsiasi, uno dei quali non riceve alcun parametro e l'altro che riceve due paramentri ad esempio interi, puoi richiamare entrambi i costruttori scrivendo super(); e super(int x, int y); l'interprete (in gergo a volte chiamato compilatore) capisce a tempo di esecuzione di quale costruttore si tratta in base ai parametri passati.
Alla seconda domanda del punto 6 posso semplicemente risponderti in questo modo: hai mai sentito parlare di ricorsione? (scusa se non ti spiego cosa è, ma non è per niente semplice in qualche riga.)
#7. Devi sempre scrivere il tipo dell'oggetto che vuoi creare, quella è come una dichiarazione di una variabile in c, l'interprete deve sapere che oggetto sta utilizzando! Ti faccio capire meglio.. Immagina di avere una superclasse FigureGeometriche e tutte le sue sotto classi Triangolo,Quadrilatero ecc ecc..
Se istanzi un oggetto t = new FigureGeometriche(); (apparte che è sintatticamente scorretto e ti da errore) l'interprete non può sapere di che oggetto ha a che fare, proprio perchè dopo new puoi mettere qualsiasi costruttore delle classi superiori, ma l'oggetto può benissimamente essere un oggetto di qualsiasi sottoclasse. Quindi è corretto scrivere sia: Triangolo t = new FigureGeometriche(); sia: Triangolo t = new Triangolo();. Spero di essere stato chiaro in quest'ultimo passaggio..
#8. Perfetto.
#9. Immagina setContentView come la printf in c. E' una delle tantissime procedure (in gergo a volte chiamate funzioni :P) di java per stampare a video.
Spero di essere stato d'aiuto, sia a te che a qualche altro.
Ciao alla prossima! ;)
Grazie! Sei stato molto chiaro, nel frattempo ho approfondito un po' java x comprendere meglio lo sviluppo di applicazioni Android, ma nel tuo post ho trovato delle conferme che mi aiutano. Solo una cosa mi è rimasta sospesa, ed è alquanto fondamentale, nel punto 5., hai tralasciato di dirmi cos'è "Bundle savedInstanceState", che parametro viene passato al costruttore? Bundle è il tipo di dato se non vado errato, ma savedInstanceState cos'è?! Questo non l'ho trovato (ancora) neanche nelle cose di java che ho letto. Cmq grazie moltissimo della tua spiegazione!
-
Quote:
Originariamente inviato da
Skyline
Di solito in java il costruttore ha il nome della classe ma questa è una classe estesa quindi dobbiamo "adattarci" alla classe madre. La classe madre dice che il metodo che verrà richiamato sarà onCreate.
Dovresti studiare un po' le basi degli oggetti. In php puoi tralasciare il tipo di variabile ecc invece in java deve essere tutto "tipizzato".
i Package se conosci PHP 5.3 (ti faccio esempi su php perchè ho letto che hai approfondito sto linguaggio) sono i namespace come su molto linguaggi.
public e private ( i più usati): Di solito le variabili si dichiarano tutte private e poi crei dei metodi pubblici get and set per le variabili. dichiari un metodo public quando vuoi far accedere dall'esterno della classe e private quando non vuoi ossia: quando vuoi far accedere solo alla classe(es: this.metodo(); )
PS:da php5 (uscito nel 2004 credo) il costruttore è __construct() e non il nome della classe e da php 5.3 sarà obbligatorio fare come java, quindi dichiarare tuti i metodì se saranno pubblici, privati ecc. Ti consiglio di comprarti un libricino di java base dove trovi SICURAMEMTE la base degli oggetti che poi ti servirà per tutti gli altri linguaggi.
Scusa se ho scritto un po' tutto incasinato ma sono di fretta ;)
No no, non fa niente se hai scritto di fretta, ho capito tutto benissimo! Grazie mille anche a te!
-
Si scusami, quel savedInstanceState ritorna un valore Bundle che dice in quell'istante lo stato dello schermo è orizzontale o verticale!
-
Alcune precisazioni
Ci tengo ad esprimere mie osservazioni sui seguenti punti :
#1. Il package è un aggregazione logica di classi e serve a raggruppare le stesse in base alla funzione che in comune esse svolgono. Fisicamente il package non è altro che una ramificazione di cartelle (immagina di sostituire il . con uno / ) gerarchicamente organizzate.
#4-5. La spiegazione è corretta ma il metodo onCreate non è il costruttore della classe (Il costruttore è un metodo che ha il medesimo nome della classe e chiamato da Java quando viene istanziata la stessa), ma il metodo richiamato dalla piattaforma android quando viene inizializzata un' Activity.
#6. E' un pò confusa la spiegazione, tu immagina che la classe Activiy che stiamo estendendo abbia una propria implementazione del metodo (e non costruttore) onCreate.
Con l'istruzione super.onCreate() noi diciamo che intendiamo eseguire il codice definito dalla superclasse ma di estenderne l'esecuzione mediante il codice definito in override. Per cui quando l' OS chiamerà il metodo Oncreate, lo stesso eseguirà dapprima il codice originale definito dalla classe Activity, dopodichè il nostro codice.
#9. Non mi risulta che sia un metodo java per stampare a video, più che altro è un metodo della classe Activity che injecta a video un oggetto di tipo TextView
Non vorrei sembrare troppo pignolo, ma potresti creare un pò di confusione.
-
Non vorrei sembrare troppo pignolo, ma potresti creare un po' di confusione (cit.) con la lingua italiana parlata nel forum.
#1 [un aggregazione] si scrive con l'apostrofo, se non sai il perchè cerca sui libri delle scuole elementari.
#6 [un pò] si scrive con l'apostrofo, se non sai il perchè vedi sopra.
Quando si diventa troppo pignoli questa è la fine che si fa, soprattutto quando si utilizza quell'aria da saccenti. Nessun dubbio su quello che hai cercato di far capire.. cercato.
Buon studio!
-
-
Saccente? solo perchè ho fatto delle precisazioni ?? Se non sei pronto al confronto non scrivere su un Forum..per la storia degli apostrofi hai ragione...io ammetto i miei sbagli..mi tocca ristudiarmi la grammatica..
Ma tu hai studiato un pò di storia prima di avere il coraggio di usare quel nick ?
-
Non sai scrivere in italiano e mi vieni a parlare di storia.. LoL!
Cmq per me possiamo chiudere qui. Se ci tieni così tanto a continuare puoi farlo in privato, questo non è assolutamente il posto adatto! Il topic era nato per aiutare il buon alextime..
Mi permetto un ulteriore o.t.:
in una community, soprattutto in una come questa con tanti iscritti, ci sono persone che sanno di meno e persone che sanno di più! Non c'è MAI nessuno che sa tutto.. Lo spirito che bisogna usare è questo: dimostrare cordialità e disposizione all'utente che sa di meno, e riconoscenza e gratidutine all'utente che sa di più.
-
1. Io non mai detto di sapere tutto, ho solo detto che ci tenevo a dare delle precisazioni.
2. Tu hai iniziato ad attaccarmi, la gente "umile" ammette di aver sbagliato
3. Sono stufo...mettiamola così...hai ragione tu!
-
No no, perché finire il flame? Mi ci metto anche io! :P
Quote:
Originariamente inviato da
Hitler
Beh non so se sono ancora in tempo, ma provo a rispondere io alle tue perplessità! Cominciamo in ordine numerico come hai fatto tu :
#1. Il package non è altro che l'insieme di tutte le classi presenti nell'apk.
No. Il package è un modo di raggruppare alcune classi. Puoi avere anche due o tre package diversi nello stesso apk.
Si chiamano namespace.
Quote:
#2. Non è proprio giusto definirle librerie, potresti usare la stessa definizione usata in c ' #include ', ma sono semplicemente delle altre classi importate nel package della tua apk.
Non sono importate. Si dichiara che verranno usate in quel file.
E` necessario perché il "compilatore" Java è molto pignolo, e vuole che sia dichiarato tutto. Serve anche a risolvere automaticamente i nomi quando non li specifichi completamente.
Quote:
#4. Un override è un sovrascrittura di un codice già implementato, nel tuo caso stai stai ri-implementando il costruttore della classe Activity, che ovviamente è stato ereditato dalla classe HelloAndroid che estende Activity.
Giusto. L'unica osservazione è che non è un costruttore ma un normale metodo.
Quote:
#5. Si è giusto quello che dici, ma java quando è nato ha creato anche delle convenzioni.. per farti capire ad esempio ha detto che tutti i package devono iniziare per lettera minuscola, le classi per lettera maiuscola, ecc ecc.. e in una convenzione dice che tutti i costruttori delle classi devono essere public.
Una cosa sono le convenzioni, un'altra gli obblighi.
Non è vero che tutti i costruttori devono essere public. Cerca come è definito il Singleton, per esempio.
Il discorso di MAIUSCOLE, minuscole, CamelCase, partialCamelCase, invece, sono convenzioni.
Quote:
#6. super(); non fa nient'altro che richiamare il costruttore della classe, ad esempio se crei due costruttori di una classe qualsiasi, uno dei quali non riceve alcun parametro e l'altro che riceve due paramentri ad esempio interi, puoi richiamare entrambi i costruttori scrivendo super(); e super(int x, int y); l'interprete (in gergo a volte chiamato compilatore) capisce a tempo di esecuzione di quale costruttore si tratta in base ai parametri passati.
Alla seconda domanda del punto 6 posso semplicemente risponderti in questo modo: hai mai sentito parlare di ricorsione? (scusa se non ti spiego cosa è, ma non è per niente semplice in qualche riga.)
super() richiama il costruttore della classe PADRE, mentre super.metodo() richiama il metodo() della classe PADRE. In pratica super serve a riferirsi alla (o alle) classi genitrici.
Quote:
#7. Devi sempre scrivere il tipo dell'oggetto che vuoi creare, quella è come una dichiarazione di una variabile in c, l'interprete deve sapere che oggetto sta utilizzando! Ti faccio capire meglio.. Immagina di avere una superclasse FigureGeometriche e tutte le sue sotto classi Triangolo,Quadrilatero ecc ecc..
Se istanzi un oggetto t = new FigureGeometriche(); (apparte che è sintatticamente scorretto e ti da errore) l'interprete non può sapere di che oggetto ha a che fare, proprio perchè dopo new puoi mettere qualsiasi costruttore delle classi superiori, ma l'oggetto può benissimamente essere un oggetto di qualsiasi sottoclasse. Quindi è corretto scrivere sia: Triangolo t = new FigureGeometriche(); sia: Triangolo t = new Triangolo();. Spero di essere stato chiaro in quest'ultimo passaggio..
Giusto, ma è una stortura tipicamente Javiana. Per esempio C# e Vala (che eredita molto da C#) permettono di scrivere
var t = new Triangolo();
E capiscono da soli che t è un Triangolo, visto che glielo dici 7 caratteri dopo.
Essendo Triangolo un figlio di FigureGeometriche, basta un cast (possibile anche in Java) quando ti serve riferirti a lui come FigureGeometriche.
Quote:
#9. Immagina setContentView come la printf in c. E' una delle tantissime procedure (in gergo a volte chiamate funzioni :P) di java per stampare a video.
No. setContentView() non stampa niente a schermo. Semplicemente comunica alla Activity che il contenuto della sua schermata è dato da quello che gli viene passato.
Può essere una banale Label (che, lei sì, in un modo o nell'altro scrive qualcosa a schermo), ma può anche essere un RelativeLayout con 30 widget dentro, anche complessi (come un Canvas o una lista che si riempie dinamicamente, o anche altri RelativeLayout o LinearLayout).
Senza voler fare polemica, non dico di voler essere perfettino, ma bisogna stare attenti a non dare informazioni completamente sbagliate (setContentView e super, per esempio). Le imperfezioni (costruttori pubblici e package, per esempio) vanno bene, non si può sapere tutto, e poi chi legge si informa, ha una traccia da cercare e capisce, ma consiglio di stare attenti.
Bye.
-