All'interno di un'attività e senza alcuna connessione Internet, sto creando un ParseObject e facendo riferimento a un altro ParseObject e all'utente corrente al suo interno. Lo sto quindi reindirizzando al datastore locale, per il salvataggio successivo (queste classi e il datastore sono inizializzati correttamente).datastore parse.com non bloccando più di un oggetto non salvato
final Rating rating = new Rating(substationObjectId, data);
// inside constructor
put(KEY_OTHER_OBJECT, OtherObject.createWithoutData(OtherObject.class, substationObjectId));
put(KEY_USER, ParseUser.getCurrentUser());
rating.pin("unsent");
Seguo questo con una query veloce per recuperare tutti i voti da quel pin.
final ParseQuery<Rating> queryUnsent = ParseQuery.getQuery(Rating.class);
queryUnsent.whereEqualTo(Rating.KEY_USER, ParseUser.getCurrentUser());
queryUnsent.fromPin("unsent");
final List<Rating> unsentRatings = queryUnsent.find();
Logger.d(LOG_TAG, "queryUnsent count = %d", unsentRatings.size());
for (Rating unsentRating: unsentRatings) {
Logger.d(LOG_TAG, "\tdatastore for %s with objectId='%s'", unsentRating().getName(), unsentRating.getObjectId());
}
Il problema: sembra che un solo Rating sia bloccato. Un secondo rating non viene memorizzato, anche se l'analisi riporta il successo.
Prima pinning (null objectId è ok e atteso) di una Valutazione di rendimenti 'Albury' questi in una successiva get-tutto query sul perno:
queryUnsent count = 1
datastore for Albury with objectId='null'
In secondo luogo per 'Arapuni':
queryUnsent count = 1
datastore for Albany with objectId='null'
Altre cose cercato:
- pinEventually ("non inviato")
- perno() senza etichetta
- save() immediatamente dopo e scartando l'eccezione collegamento
- rimozione user = clausola utente corrente ovunque
- query generali contro l'archivio dati nel loro insieme confermano che gli oggetti aggiuntivi non sono conservati a all
Dopo essere entrati online e aver salvato il Rating (che gli fornisce un objectId), un nuovo Rating offline verrà bloccato correttamente ma il problema si ripeterà con un secondo Rating offline.
Ho la sensazione che sia un bug con la libreria Android SDK di parse.com. Sembra che l'archivio dati imponga un vincolo univoco su objectId, ma gli oggetti non salvati non hanno ancora un oggetto ID.
Qualcun altro si è imbattuto in questo problema o può suggerire un lavoro in giro?
Ho riscontrato anche problemi con voci puramente locali. I miei problemi riguardano tuttavia principalmente l'ottenimento di quegli oggetti sbloccati. – cYrixmorten
Ho anche provato saveEventually() - solo un oggetto viene effettivamente salvato quando viene ripristinata la connettività. – Tom
Appena notato ... nella prima riga di codice 'nuovo Rating (substationObjectId, data)' sembra che tu assegni un oggettoId alla Rating 'substationObjectId'. Questa potrebbe essere la causa del tuo problema, dal momento che non puoi avere più oggetti con lo stesso oggetto ID memorizzato. – cYrixmorten