es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Valor no guardado en la clase de datos.

Actualmente estoy construyendo una aplicación y he agregado Dagger Hilt para definir una clase única para acceder a los datos. La inyección parece funcionar bien, pero no puedo almacenar un valor en la clase de datos que uso.

Primero, he creado un Singleton que utiliza el código para establecer/recuperar valores de una estructura de datos.

Cuando llamo setListOfVehicles, listOfVehicles contiene 10 elementos, pero…

La estructura de datos ExtendedCarList se define como sigue:

El Singleton se pasa usando Hilt como, por ejemplo, en el viewModel a continuación:

Y en la actividad, usando el viewModel, solo hago esto:

¿Alguna idea de por qué y cómo solucionarlo?
Gracias.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema podría estar en la inicialización de ExtendedCarList. Como no has compartido el código de cómo se inicializa ExtendedCarList, es difícil decir con certeza. Sin embargo, en la clase CarListMemorySource, has inicializado extendedCarList como null, pero necesita inicializarse con una instancia de ExtendedCarList antes de que puedas configurar cualquier valor en él.

    Puedes actualizar el código de CarListMemorySource para inicializar extendedCarList con una instancia de ExtendedCarList de esta manera:

    @Singleton
    class CarListMemorySource @Inject constructor() : CarListInterface {
    
        private var extendedCarList: ExtendedCarList = ExtendedCarList(emptyList())
    
        override fun setListOfVehicles(listOfVehicles: List<item>) 
        {
            extendedCarList.listOfVehicles = listOfVehicles
        }
    
    }
    

    Esto inicializa extendedCarList con una lista vacía cuando se inicializa la clase. También puedes agregar un método getter a CarListMemorySource para recuperar la lista de vehículos de esta manera:

    fun getListOfVehicles(): List<item> {
        return extendedCarList.listOfVehicles
    }
    

    Luego puedes actualizar tu HomeScreenViewModel para recuperar la lista de vehículos de esta manera:

    @HiltViewModel
    class HomeScreenViewModel @Inject constructor(
        private val carList: CarListMemorySource
    ): ViewModel() {
    
        fun getList(): List<item> {
            // HAGA ALGO PARA OBTENER UNA LISTA A
            carList.setListOfVehicles(ListA)
            return carList.getListOfVehicles()
        }
    }
    

    Y finalmente, en tu HomeScreenActivity, puedes recuperar la lista de vehículos de tu HomeScreenViewModel de esta manera:

    viewModel.getList().let { vehicles ->
        // Haz lo que necesites con la lista de vehículos aquí
    }
    

    Esto debería solucionar el problema que estás experimentando con el almacenamiento de valores en tu clase de datos ExtendedCarList.

Comments are closed.