A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Actualizaciones Realtime Criptomonedas

19/21
Recursos

Aportes 4

Preguntas 2

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

En el metodo onBuyCryptoClicked si queremos dar de alta una nueva criptomoneda por ejemplo

name:Litecoin
imageUrl: https://cdn0.iconfinder.com/data/icons/blockchain-classic/256/Litecoin-512.png
available: 10

y probamos la app con un usuario que ya ten铆amos en la base, y le damos comprar a la nueva criptomoneda esta se reducir铆a en uno pero no aparecer铆a la criptomoneda al usuario鈥 Lo ideal seria que al comprar en caso de que no encontrara la criptomoneda que no tiene el usuario en su panel se le agregue por lo que el metodo deberia quedar algo como esto:

fun onBuyCryptoClicked(crypto: Crypto) {
        var flag = false
        if (crypto.available > 0) {
            for (userCrypto in user!!.cryptosList!!) {
                if (userCrypto.name == crypto.name) {
                    userCrypto.available += 1
                    flag = true
                    break
                }
            }
            if(!flag){
                val cryptoUser = Crypto()
                cryptoUser.name = crypto.name
                cryptoUser.available = 1
                cryptoUser.imageUrl = crypto.imageUrl
                user!!.cryptosList!!.toMutableList().add(cryptoUser)
            }

            crypto.available--

            firestoreService.updateUser(user!!, null)
            firestoreService.updateCrypto(crypto)
        }
    }

Pero aun me falta algo para que lo agregue bien ya que no se esta actualizando cuando debe agregar la cripto a la lista鈥 Alguien tiene alguna idea?

Un detalle: yo quise usar ID autogenerados por Firebase (para probar). Justo en esta clase la app dej贸 de servir y eso era porque no estaba obteniendo el ID al convertir los datos a objetos con la funci贸n toObject(). Investigando, encontr茅 que la causa era que faltaba especificar en la data class cu谩l iba a ser el atributo de ID.

Para solucionarlo, solo hay que a帽adir la anotaci贸n @DocumentId de la siguiente manera:

data class Crypto(
    @DocumentId val id: String = "",
    var name: String = "",
    var imageUrl: String = "",
    var available: Int = 0
)

Al momento de probar el resultado y dar click en comprar una criptomoneda me arroja el siguiente error:

java.lang.NullPointerException
        at com.example.criptotienda.TraderActivity.onBuyCryptoClicked(TraderActivity.kt:168)

seria en la linea for (userCrypto in user!!.cryptosList!!) {

override fun onBuyCryptoClicked(crypto: Crypto) {
        if (crypto.available > 0) {
           for (userCrypto in user!!.cryptosList!!) {
                if (userCrypto.name == crypto.name) {
                    userCrypto.available += 1
                    break
                }
            }
            crypto.available--

            firestoreService.updateUser(user!!, null)
            firestoreService.updateCrypto(crypto)
        }
    }

Y la pantalla de las criptomonedas se mira como se refresca los botones de compra debido al realtime