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.

Nueva instancia de sala cuando diferentes usuarios ingresan con el mismo dispositivo.

Te proporciono un poco de información sobre lo que estoy haciendo. Estoy trabajando en un proyecto en el que dos tipos de usuarios pueden iniciar sesión (un paciente y un médico). Ambos pueden compartir algún tipo de información. Estoy utilizando Firebase para que los usuarios inicien sesión y compartan información entre ellos, y la base de datos Room para que sea posible que el paciente almacene algunos de sus registros. El pequeño problema es que cuando inicio sesión con un paciente diferente, esos registros aparecen en el nuevo usuario. Por lo tanto, me preguntaba si hay alguna manera de crear diferentes instancias de la base de datos Room para diferentes usuarios que hayan iniciado sesión. Aquí tienes la implementación de la base de datos Room en código.

—> Proveedor de la base de datos Room utilizando inyección de dependencias.

@Module
@InstallIn(SingletonComponent::class)
object DatabaseModule {

@Singleton
@Provides
fun provideDatabase(
@ApplicationContext context: Context
) = Room.databaseBuilder(
context,
UserCancerDatabase::class.java,
NOMBRE_BASE_DE_DATOS
).build()

@Singleton
@Provides
fun providesDao(database: UserCancerDatabase) = database.cancerDataDao()}

—> Base de datos

@Database(
entities = [CancerDataEntity::class, UVEntity::class],
version = 1,
exportSchema = false)
@TypeConverters(UserCancerDataTypeConverter::class, UVDataTypeConverter::class)
abstract class UserCancerDatabase: RoomDatabase() {
abstract fun cancerDataDao(): DataDao}

—> DAO

@Dao
interface DataDao {

/**** DATOS DE CÁNCER PRE-DIAGNÓSTICO *****/
@Query(“SELECT * FROM cancer_data_table”)
fun readCancerData(): kotlinx.coroutines.flow.Flow<>>

@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertCancerRecord(cancerDataEntity: CancerDataEntity)

@Delete
suspend fun deleteCancerRecord(cancerDataEntity: CancerDataEntity)

@Query(“DELETE FROM cancer_data_table”)
suspend fun deleteAllCancerRecords()

/******* DATOS METEOROLÓGICOS DE RADIACIÓN *********/
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertRadiationWeatherData(uvEntity: UVEntity)
@Query(“SELECT * FROM RADIATION_WEATHER_TABLE”)
fun readRadiationWeatherData(): Flow}

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para crear diferentes instancias de sala para diferentes usuarios conectados, puedes modificar tu método provideDatabase para incluir el id de usuario en el nombre de la base de datos. De esta manera, cada usuario tendrá su propia base de datos única.

    @Singleton
    @Provides
    fun provideDatabase(
        @ApplicationContext context: Context,
        firebaseAuth: FirebaseAuth // Agregar dependencia de autenticación de Firebase
    ): UserCancerDatabase {
        val user = firebaseAuth.currentUser
        val databaseName = "user_${user?.uid}_cancer_database" // Incluir id de usuario en el nombre de la base de datos
        return Room.databaseBuilder(
            context,
            UserCancerDatabase::class.java,
            databaseName
        ).build()
    }
    

    También necesitarías pasar la instancia de FirebaseAuth como una dependencia para este método.

    Ahora, cuando un nuevo usuario inicie sesión, se creará una nueva instancia de UserCancerDatabase con un nombre único. Esto debería evitar que los registros se compartan entre diferentes usuarios.

Comments are closed.