DevCorner: Parse.com e gli oggetti in cloud

Roberto Orgiu
Roberto Orgiu
DevCorner: Parse.com e gli oggetti in cloud

Previously on DevCorner... abbiamo visto come utilizzare Dropbox per salvare i dati di ogni utente sul relativo account cloud, ma se avessimo bisogno, ad esempio, di una base dati condivisa? Sarebbe effettivamente un problema utilizzare il noto servizio di storage ma, per fortuna, ci sono alternative gratuite e ugualmente funzionali come Parse. Senza indugi, creiamo il nostro account e, una volta verificate le nostre credenziali, procediamo a realizzare la nostra applicazione dal bottone "Create New App" che troviamo nella parte in alto a destra del nostro form. A questo punto, ci verrà richiesto il nome del nostro progetto e ci verranno assegnate le chiavi per poter accedere al servizio (l'intero processo è esemplificato nella galleria qui sotto).

Ora, prendiamo nota dei primi due valori (Application ID e Client Key), che saranno i valori che andremo ad inserire nel metodo onCreate della nostra Activity per inizializzare il servizio (ricordiamoci però di scaricare il Software Development Kit e aggiungerlo al nostro progetto in modalità "Compile" come di consueto):

Parse.initialize(this, APPLICATION_ID, CLIENT_KEY);

Salvare i dati nel cloud è davvero immediato, e ci bastano 3 istruzioni per salvare un valore (ci servirà uno statement per ogni valore, ma questo va da sè) nel formato della mappa, quindi nell'ormai conosciuto standard chiave-valore: iniziamo quindi con il creare un oggetto di tipo "DevCorner", inseriamo il valore che vogliamo salvare ("AndroidWorld.it") con la giusta chiave ("BestBlog") e richiediamo il salvataggio nel database di Parse.

ParseObject obj = new ParseObject("DevCorner");
obj.put("BestBlog","AndroidWorld.it");
obj.saveInBackground();

Come dicevamo, è davvero semplice salvare i dati, ma anche il caricamento e la cancellazione di uno o più record sono altrettanto veloci: vedremo infatti che le nostre routine varieranno solamente per una istruzione (quella che poi ne indicherà il ruolo), quindi possiamo scoprirle nello stesso istante. Iniziamo con il creare la query di ricerca, che ci permetterà, nel costruttore, di specificare quale oggetto interrogare

ParseQuery query = ParseQuery.getQuery("DevCorner");

Ora possiamo specificare che vogliamo prendere solamente quegli oggetti il cui valore "BestBlog" è uguale ad "AndroidWorld.it"

query.whereEqualTo("BestBlog","AndroidWorld.it");

A questo punto, possiamo lanciare la ricerca in background e occuparci della gestione del risultato nel callback

query.findInBackground(new FindCallback() {
public void done(List parseObjects, ParseException e) {
	if(e==null)

Arrivati fin qui, non ci resta che scorrere gli oggetti che il nostro servizio ha scaricato sul nostro dispositivo

for(ParseObject obj : parseObjects)

e decidere se cancellarli

obj.deleteInBackground();

oppure prenderne dei valori

obj.get("BestBlog")

La nostra applicazione è praticamente pronta, ma ci mancano i soliti due permessi che andremo ad aggiungere al nostro file Manifest

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

Ora possiamo compilare e goderci il risultato del nostro lavoro: unico inconveniente di questo servizio è che, essendo basato su meccanismi di richieste in background, potremmo notare un minimo ritardo nel salvare i dati o effettuare altre operazioni, ma nelle nostre prove non ci ha mai delusi e siamo sicuri che non sia quel secondo in più che ci farà desistere dall'utilizzarlo.

Come ad ogni puntata, potrete trovare tutte le risorse necessarie sul thread ufficiale del nostro forum. Buona programmazione a tutti!