2011-10-19 16 views
5

sto cercando di attuare la seconda modello client REST presentato da Virgilio Dobjanschi su questo video:Transazioni SQLite con ContentProvider del pattern IO di REST di Google?

http://developer.android.com/videos/index.html#v=xHXn3Kg2IQE

Questo è il diagramma di alto livello per il modello di cui sto parlando:

enter image description here

ho implementato tutto come suggerito, ma ho un modello complesso database SQLite con un sacco di tavoli e ho bisogno di utilizzare le transazioni per aggiornare i miei dati locali con il nuovo marchio dati recuperati dai server (passo 7 nella foto).

Ci sono dei suggerimenti che potresti fare per aiutarmi a implementare un ContentProvider transazionale per questo caso?

Alcuni di voi potrebbero suggerirmi di utilizzare SQLite raw, ma in questo modo non trarrò i vantaggi di ContentObservers, managedQueries e sincronizzazione degli accessi al database fornita da ContentProvider.

Qualsiasi aiuto sarebbe apprezzato.

+0

Adoro quel video, a proposito. Mi ha davvero aiutato a capire REST. –

risposta

0

È possibile implementare la funzione personalizzata nel ContentProvider che esegue le transazioni necessarie. Quindi è possibile chiamare tali funzioni utilizzando la funzione call() nel processore.

+0

Grazie Kurtis, potrebbe risolvere il problema, a meno che non sia supportato solo sui dispositivi che eseguono SDK> = 11. La mia applicazione si rivolge a dispositivi con Android 1.6 o versioni successive. = ( –

2

Poiché non si ha accesso all'API di livello 11, è possibile farlo. Diciamo che si vuole fare questa roba transazione nel vostro metodo di aggiornamento:

final Cursor update(Uri uri, ContentValues values, String where, String[] selectionArgs) 
{ 

    if(uri == uri1){ 
    //do stuff you normally do 
    } 
    //other uri stuff 
    ... 
    else if(uri == special_uri){ 
    //do your transaction stuff here 
    } 
} 

In questo caso, special_uri è un URI che si utilizza per indicare che si sta andando ad avere bisogno di fare le tue cose operazione speciale. In altre parole, stiamo usando l'URI per indicare che una transazione deve essere eseguita.

+0

Ho già preso in considerazione l'utilizzo di flag nell'URI per questo, ma mi aspetto che ci sia un approccio più elegante. Sono sicuro che qualcuno qui in SO l'abbia già affrontato. Grazie ancora –

+0

Non hai usare i flag. In realtà potresti avere un URI diverso. Questo non è poi così poco elegante perché è ancora RESTful. –