2016-04-03 32 views
6

Ho un campo booleano personalizzato denominato Approvato nel mio oggetto ParseUser personalizzato. Modifichiamo questo campo da falso a vero tramite un'app Web. Secondo la documentazione, dovrei essere in grado di aggiornare currentUser dopo aver cambiato la bandiera con fetchInBackground(), in questo modo:Analitica Android: impossibile aggiornare l'utente locale

ParseUser.getCurrentUser().fetchInBackground(new GetCallback<ParseObject>() { 
    @Override 
    public void done(ParseObject parseObject, ParseException e) { 
     Log.v("qwer", "fetched User: " + ((CustomUser)parseObject).isApproved()); 
    } 
}); 

Ma anche se la bandiera approvato è stata impostata su true, il risultato di ritorno dal server è sempre falso Salvo il logout e il login di nuovo, a quel punto currentUser e il rispettivo campo sono sincronizzati con il server.

Perché non recuperaInBackground() funziona per l'utente locale e, se lo utilizzo in modo errato, come aggiorno l'Utente corrente.

+0

Sei sicuro di poter trasmettere parseObject a CustomUser? – Shane

+0

Sì, ho esteso la classe ParseUser. Tecnicamente avrei potuto definire il tipo di callback come CustomUser ma l'ho appena lanciato per chiarezza in questo esempio. – jwBurnside

+0

È passato un po 'di tempo dall'utilizzo di Parse, ma non è necessario fare 'pinInBackground' per salvare sul datastore locale? –

risposta

1

Vedere this collegamento, il punto è quello di utilizzare pinInBackground e anche consentire datastore locale con Parse.enableLocalDatastore(yourContext); nella classe Application.


Aggiornamento:

Non sono sicuro se questo vi aiuterà, ma ho una situazione simile con voi:

faccio un tipico user.put("userVerified", true); poi user.saveInBackground per salvare un valore booleano che indica se l'utente è stato verificato, quindi nella prossima attività uso user.getBoolean("userVerified") per recuperare la bandiera ... Questo sarebbe qualcosa che potresti prendere in considerazione?

+0

Sì, ho familiarità con il pinning. Non capisco perché dovrei pin l'oggetto corrente Utente, esiste per la durata della mia sessione. Voglio solo aggiornare l'utente corrente, non gestire un altro livello di dati locali. – jwBurnside

+0

Hmm ... dai un'occhiata alla mia risposta aggiornata, non so se risponda alla tua domanda ma potrebbe valere la pena dare un'occhiata. –

+0

Grazie per l'aggiornamento. Questo non funzionerà abbastanza da quando stiamo aggiornando il flag tramite una webapp e non dal lato client. Dovrei usare il lato client saveInBackground(), currentUser si sincronizzerebbe da solo (se sto ricordando correttamente) e tutto andrebbe bene. – jwBurnside