2016-01-07 19 views
6

1. La mia domanda è Ogni 2 minuti i dati vengono inseriti nel database locale (utilizzando Azure Offline Sync), quindi ogni 5 minuti i dati sono sincronizzati con il database di Azure con un servizio in background.Ottenere un risultato da Azure una riga è stata inserita ed eliminare dati di una riga dal database locale dopo l'inserimento nel database di Azure

2.Ogni riga dati Dopo l'inserimento nel server AZURE, si desidera eliminare dal database locale.

mia domanda:

1.how può so che il mio ogni riga viene inserita o meno in Server. Qualsiasi risposta verrà inviata al client End from Server. Altra altra soluzione? .

2.Eliminare una riga Inserita nel server di Azure da Local Sqlite (dopo aver ottenuto la conformità come inserito dal server di Azure).

Inoltre, desidero recuperare i dati salvati nel database locale utilizzando il metodo di Azure.

Sto utilizzando Azure Cloud per Server End.

Link I referred for Offline Azure Sync from Sqlite

risposta

4

Per 1, è possibile implementare il gestore di intercettare le risposte del server prima di dare i dati al client (vedi: https://github.com/Azure/azure-mobile-apps-android-client/blob/ef4759078cb031de9a5cbb05d07dc52322952ac1/sdk/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/sync/synchandler/SimpleSyncHandler.java)

public class MySyncHandler implements MobileServiceSyncHandler { 

@Override 
public JsonObject executeTableOperation(RemoteTableOperationProcessor processor, TableOperation operation) throws MobileServiceSyncHandlerException { 
    try { 
     return operation.accept(processor); 
    } catch (Throwable e) { 
     throw new MobileServiceSyncHandlerException(e); 
    } 
} 

Se l'operazione non buttare, ciò significa che la richiesta HTTP ha avuto esito positivo, quindi è possibile passare all'eliminazione dell'elemento.

Per eliminare una riga, non si desidera utilizzare una tabella di sincronizzazione in quanto verrebbe tracciata l'operazione. È possibile utilizzare una connessione SQL diretta per farlo. Un'altra opzione sarebbe quella di aggiornare la funzione precedente per lanciare un errore personalizzato invece di tornare. Ciò consentirebbe all'errore di risalire al metodo successivo nel gestore (onPushComplete).

Con la classe TableOperationError, è facile annullare l'operazione e scartare l'elemento locale utilizzando un metodo incorporato nel contesto di sincronizzazione.

Così ciclo attraverso le getOperationErrors() e per ogni uno che è il vostro errore personalizzato è sufficiente chiamare il metodo cancelAndDiscardItem (https://github.com/Azure/azure-mobile-apps-android-client/blob/ef4759078cb031de9a5cbb05d07dc52322952ac1/sdk/src/sdk/src/main/java/com/microsoft/windowsazure/mobileservices/table/sync/MobileServiceSyncContext.java#L283)

Infine, il recupero dei dati fuori dal negozio locale avviene tramite la classe SyncTable. I metodi di lettura e di interrogazione sono per lo più indentici alle versioni online. Ecco un esempio sollevato dal QS Android:

Query query = QueryOperations.field("complete").eq(val(false)); 
    return mToDoTable.read(query).get(); 
1

Microsoft ha fornito incremental sync in iOS utilizzando un ID di query, che recupera solo i record modificati dopo l'ultima sincronizzazione utilizzando UpdatedAt timestamp del record. Forse potresti cercare se Microsoft ha anche fornito la stessa funzionalità in Android?

Problemi correlati