Qualcuno mi può spiegare a cosa serve esattamente implementare in 1 activity la classe Parcelable ? non riesco a capirlo :( ho intuito che si tratta di comunicazione tra activity però non riesco a capire il perchè usare questo Parcelable....
Visualizzazione stampabile
Qualcuno mi può spiegare a cosa serve esattamente implementare in 1 activity la classe Parcelable ? non riesco a capirlo :( ho intuito che si tratta di comunicazione tra activity però non riesco a capire il perchè usare questo Parcelable....
Hehe mimmog sei andato avanti vedo con il libro roftl
Da quel che ho capito l'implementare parcelable serve a fare in modo avere:
- un modo per serializzare dei dati (se non erro faceva l'esempio con le squadre di calcio) per poi gestire il passaggio tra due activity o più in maniera semplice
Se vuoi saper il perchè, io ho trovato una mia specie di deduzione che è nata dall'essermi chiesto come posso passare dei dati tra un'activity e un'altra:
- facendo un'architettura statica per garantirmi l'istanza del tale oggetto (sconsigliato se non devi far qualcosa tipo la connessione a un db, dove ti fai la tua bella classe singleton che ti tiene la connessione, sconnessione, ecc)
- tramite un intent: comodo per oggetti semplici e intuitivi da gestire
quindi magari facendo un esempio (avendo implementato la classe Dipendente con parcelable, ponendo 3 campi: id, nome e cognome)
per passarlo ti basterà fare un semplice intent
e per poi ripigliarlo molto semplicemente nell'altra activity
evitando così istanze statiche o cose strane.. certo le alternative ci sono, però perchè farle quando con semplicità ci viene offerto un bel meccanismo e riciclabile? :cool:
Spero di esserti stato d'aiuto un pochino..
Mooolto chiaro! vedo che sei diventato un mostro di bravura!!! Che per caso mi spieghi anche Bundle a che serve? :-)
PS: Come va con il galaxy? hai aggiornato a froyo? ;-)
Buahahha il galaxy non è bello! E' una figata!
potranno dire che è di plastica.. è vero, ma quanto pesa di meno?
E poi è davvero veloce, prestante e si inchioda quando io non controllo le eccezioni da semolo ahaha
Cmq non son un mostro, anzì, son arrivato al capitolo tipo delle mapview ma quando un paio di capitoli prima parlava di get e post tramite http non ho capito una beata mazza... ci son una 20ina di pagine dove leggo arabo roftl
Tornand a noi...
Bundle...bundle..bundle è una classe che ti fa da contenitore per elementi serializzabili e/o parcellizabili..
Non vorrei dire una cavolata ma mi sembra molto una hashmap in cui tu hai una chiave e un oggetto che vi corrisponde :)
Poi ho visto che la documentazione presenta un sacco di metodi per questa classe ma quelli che ho visto/provato son i classici per inserire e estrarre dei dati..
Tipo vuoi passare una stringa, un char e un tuo oggetto parcellizzato (si potrà dire in italiano? roftl ) basta che fai
dove b è la tua istanza di Bundle ovviamente.
e poi ad estrarre fai con la get<tipo>(chiave);
Devo dire che Android mi sta stupendo molto perchè è un passo di un java che ovviamente in università non ho visto.. Un java che mi fa vedere cose totalmente nuove, difficile ma molto robusto.
Purtroppo quello che manca a me è il capire il perchè/come di certe cose come il punto dove ti dicevo mi son incartato...
E pensare che sto facendo un'app dove dovrei ottenere dei dati da ebay ma non so come si fa hahah :D
PS: galaxy forever! :p
Ma pazzooooooo roftl
ahah nemmeno io installo gli esperimentini stupidi però tipo l'app a cui sto lavorando l'ho messa :D non fa nulla di invasivo se non creare un db in cui salva ed estrae dei dati :D
Mi piacerebbe finirla e poi metterla con la pubblicità o a 0.99 € sul market hehe
Dai che appena pubblichi hai già un acquirente :-)
Ebay lo uso eccome ! :D anzi ho già un app di ebay sul galaxy ;)
Scusa dhalia, tornando ai DB, dopo aver lanciato l'applicazione mi esce questo errore : "java.lang.IllegalArgumentException: column '_id' does not exist" eppure come puoi vedere dal codice qui sotto il campo _id è il primo campo che ho messo nella creazione del DB:
debuggando ho visto che si tratta di un errore che riscontra nel SimpleCursorAdapter in quanto nel array "String[] From" non indico il campo _id ma unicamente i campi cognome e nome e cioèQuote:
SQLiteOpenHelper Helper = new SQLiteOpenHelper(this, "miodb2", null, 2){
@Override
public void onCreate(SQLiteDatabase db) {
StringBuilder createQuery = new StringBuilder();
createQuery.append("CREATE TABLE \"PERSONE\" (");
createQuery.append("\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT,");
createQuery.append("\"cognome\" TEXT NOT NULL,");
createQuery.append("\"nome\" TEXT NOT NULL");
createQuery.append(")");
db.execSQL(createQuery.toString());
}
public String[] colonne = new String[]{cognome,nome };
se invece scrivo
public String[] colonne = new String[]{id,cognome,nome };
non mi da l'errore....però vedendo l'esempio di Carli chiamato TeamManager vedo che lui non lo mensiona proprio l'id nell'array che chiama FROMS....
Spero di essermi spiegato :)
Hehe la tabella sembrerebbe esser apposto (anche se mi son chiesto perchè uno non si fa direttamente la stringa per semplicità ma details :P )..
L'errore potrebbe esserci quando determini il cursore per il db.. come lo hai scritto?
Cursor c = db.query(NomeTabella, TutteLeColonne,null,null,null,null,null);
CursorAdapter a = (this, LayoutACuiApplicare, c, COLONNE_DA_SELEZIONARE, ID_ELEMENTI_DESTINAZIONE);
Secondo me la cazzatina che hai fatto è quella di non aver specificato nel cursor e nel cursor adapter le colonne giuste :p
Sbaglio? altrimenti altre soluzioni non mi vengon in mente..
Ecco qui il codice :
public String cognome = "cognome";
public String id = "_id";
public String nome = "nome";
public String[] colonne = new String[]{id,cognome,nome };
public int[] textview_visual = new int[]{ R.id.TextViewCognome,R.id.TextViewNome };
db = Helper.getWritableDatabase();
cursore = db.query("PERSONE", colonne, null, null, null, null, null);
adapter = new SimpleCursorAdapter(this, R.layout.row, cursore, colonne,textview_visual);
Il problema è che l'id in grassetto non ci dovrebbe essere secondo l'esempio di Carli !!
Ahaha ma appunto se tu guardi bene l'esempio, vado un po' a memoria, lui dell'id se ne frega giustamente perchè uno con l'id non ci fa nulla in quell'esempio.. Allora che fa?
Si definisce un arrayStringhe delle colonne che è quello che usa nel cursor (e lì ci va l'id), poi però si fa un altro array di stringhe delle colonne che gli interessano che son quelle che usa nel cursor adapter :)
Quello che è "sbagliato" (giusto se ti interessano anche gli id) è questo:
adapter = new SimpleCursorAdapter(this, R.layout.row, cursore, colonne,textview_visual);
Lui mi pare faccia così:
adapter = new SimpleCursorAdapter(this, R.layout.row, cursore, colonneInteressate,textview_visual);
Prova a guardare bene :)
Io purtroppo ora non ho sottomano il codice perchè son qui che ho appena finito di spalare neve hehe
Neve? A torino nevica?? Azz!!
Scrivo dal galaxy quindi perdona gli errori..
Carli crea un array COLUMNS nel quale mette _id ma questo array nuon viene utilizzato tutto nell'adapter infatti lui richiama un altro array che si chiama FROMS nel quale non cè l'id ma giustamente solo gli altri campi per questo mi stranisco quando io nell'adapter metto un array senza id ed il programma mi da errore!
EDIT : Avevi ragione!!!! Nel cursor usa COLUMNS!!!! Sei grande! :-)
Buahaha io son di Trento ahaha non Torino :D ahaha ecco perchè c'è tutta questa cavolo di neve! roftl
Guarda sinceramente son io che ringrazio te! Serve un sacco poter confrontarsi con qualcuno, capire errori, dare aiuti ecc
Aiuta un sacco a capire e a tener sempre tutto fresco e alla mano :)
Sembra che ci siamo solo io e te sul forum!!! Ahahah ma cymon e copacabana dove sono?
Cmq android è strano...ma perchè xreare un Bundle come contenitore di.un Parcelable quando si potrebbe passare un Parcellable direttamente? Bho, la risposta ci sará ma android è proprio strano! ! :-)
buahahaha si è un post nostro!
Cmq secondo me la risposta è semplice:
- nel bundle ci metti non solo cose parcellizzabili ma anche tipi semplici come int e string
- in modo tipo hashmap il che è tanta roba, visto che semplifica un sacco poter identificare le cose tramite una stringa
A:
public static final String chiave = "p"
B:
b con un semplice A.chiave sa già qual'è la chiave che sa sarà sicuramente l'identificatore
(ovviamente dopo devi implementare tutta l'architettura, questa è solo una soluzione per come aver un riferimento un po' solido hehe roftl)