ParseUser.saveInBackground no actualiza la base de datos.
Tengo un usuario de la siguiente manera:
@ParseClassName("User")
class User : ParseUser() {
var firstName by ParseDelegate<string?>()
var lastName by ParseDelegate<string?>()
}
Clase abierta ParseDelegate<t>
:
open class ParseDelegate<t> {
@Suppress("UNCHECKED_CAST")
operator fun getValue(parseObj: ParseObject, propertyMetadata: KProperty<*>): T {
return parseObj.get(propertyMetadata.name) as T
}
operator fun setValue(parseObj: ParseObject, propertyMetadata: KProperty<*>, a: Any?) {
if (a != null) {
parseObj.put(propertyMetadata.name, a)
parseObj.saveEventually()
}
}
}
Luego, una configuración así:
val parseBuilder = Parse.Configuration.Builder(this)
.applicationId(BuildConfig.PARSE_APP_ID)
.server(BuildConfig.PARSE_SERVER)
ParseUser.registerSubclass(User::class.java)
Parse.initialize(parseBuilder.build())
Intento editarlo de esta manera:
val user = ParseUser.getCurrentUser() as User
user.firstName = newFirstName
user.lastName = newLastName
user.saveInBackground {
if (it == null) {
Timber.d("[user] cambios de usuario guardados")
}
it?.apply { Timber.d("[user] problema al guardar cambios de usuario ${it.message}") }
}
El guardado activa el bloque de cambios guardados, y si navego fuera de ese fragmento y vuelvo, los cambios se guardan en ParseUser.getCurrentUser. Sin embargo, cuando voy a mi base de datos Parse en la nube, los cambios no se han guardado y el nombre y apellido siguen siendo nulos.
¿Alguna pista sobre qué estoy haciendo mal?</string?></string?>
davy.ai
Parece que estás heredando la clase
ParseUser
con tu claseUser
y utilizando la claseParseDelegate
para mapear propiedades a campos de Parse. Sin embargo, cuando intentas guardar cambios en el usuario actual, lo estás casteando aUser
en lugar deParseUser
.En lugar de castear el resultado de
ParseUser.getCurrentUser()
comoUser
, deberías castearlo comoParseUser
y luego obtener las propiedades mapeadas utilizando sus getters y setters. Aquí tienes un ejemplo:Al utilizar el método
put
en el objetoParseUser
, podrás guardar las actualizaciones en los campos correspondientes en la base de datos de Parse. Esto también debería guardar tus cambios en la base de datos en la nube.