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.

Cómo agregar consultas de ROOM que tomen parámetros y devuelvan datos

Estoy intentando crear una nueva consulta de base de datos de habitación que tome un parámetro y devuelva una lista. Todos los documentos que leí y los videos que vi solo me muestran hasta la consulta DAO (que ya hice), pero lo que no puedo encontrar es cómo crear las consultas posteriores para las clases de repositorio y vista de modelo.
Esta es mi consulta DAO:

@Query(“SELECT * FROM member WHERE name = :reselectedPlayerName”)
List getPlayersForReselection(String reselectedPlayerName);

He creado exitosamente una consulta ‘LiveData’ (para otra tarea) que no toma ningún parámetro, pero NO quiero una consulta ‘Livedata’ esta vez y no puedo ver cómo crear la consulta en la clase de repositorio.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para crear una nueva consulta de base de datos de habitaciones que tome un parámetro y devuelva una lista, ya ha completado la consulta DAO que toma el parámetro. Ahora, necesita crear la consulta del repositorio para acceder a la consulta DAO, y una consulta de viewModel para acceder a la consulta del repositorio.

    En la clase del repositorio, puede crear una función que invoque la función de consulta DAO. La función del repositorio puede llamar a la función de consulta DAO con el parámetro de entrada, y luego devolver la lista resultante. Aquí hay un ejemplo:

    public List selectPlayersForReselection(String reselectedPlayerName){
    return dao.getPlayersForReselection(reselectedPlayerName);
    }

    En la clase de viewModel, puede crear una función que llame a la función del repositorio. La función del viewModel puede activar la función del repositorio con el parámetro de entrada, y luego almacenar la lista resultante en un objeto MutableLiveData para que la UI pueda observarla. Aquí hay un ejemplo:

    private MutableLiveData<>> membersForReselection;

    public LiveData<><member>> getMembersForReselection(String reselectedPlayerName){
        if(membersForReselection == null){
            membersForReselection = new MutableLiveData<>();
        }
        membersForReselection.postValue(repository.selectPlayersForReselection(reselectedPlayerName));
        return membersForReselection;
    }
    

    Esta función de viewModel devuelve un objeto LiveData que la UI puede observar. La función del repositorio ejecuta la consulta DAO con el parámetro de entrada, y devuelve la lista resultante a la función del viewModel. La función del viewModel luego actualiza el valor del objeto MutableLiveData con la lista resultante, y lo devuelve a la UI.

    Con estas tres clases configuradas, ahora puede llamar a la función del viewModel desde su capa de UI con el parámetro de entrada, y observar el objeto LiveData para obtener la lista resultante.

Comments are closed.