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.

IllegalArgumentException: La versión debe ser >= 1, fue 0. en Android Studio con la base de datos Room.

Estoy intentando persistir un objeto simple que llamo QuesDto en una base de datos Room.

Revisé todo pero no pude entender por qué estoy obteniendo esta excepción:

FATAL EXCEPTION: pool-3-thread-1
Proceso: ovh.lahmadi.naditutoadmin, PID: 7753
java.lang.IllegalArgumentException: La versión debe ser >= 1, fue 0
en android.database.sqlite.SQLiteOpenHelper.(SQLiteOpenHelper.java:164)
…….

Aquí está mi clase abstracta de la base de datos Room:

@Database(entities = {QuesDto.class}, version = 0, exportSchema = false)
public abstract class QuizRoomDB extends RoomDatabase {
private static volatile QuizRoomDB INSTANCE;
public abstract QuizDao wordDao();
.....

public static QuizRoomDB getDatabase(Context context){
    if (INSTANCE == null){
        synchronized (QuizRoomDB.class){
            if (INSTANCE == null){
                    INSTANCE = Room.databaseBuilder(context.getApplicationContext(), QuizRoomDB.class, "quiz_db")
                            .build();
            }
        }
    }
    return INSTANCE;
}

}

Mi interfaz Dao:

@Dao
public interface QuizDao {
    @Insert (onConflict = OnConflictStrategy.IGNORE)
    void insert(QuesDto quesDto);
}

Mi entidad:

@Entity (tableName = "ques")
public class QuesDto {
    @PrimaryKey
    @NonNull
    private long quesId;
    private String quesHtml;
    ......
}

Cómo llamo a la función insert:

public QuestionRepository(Application application) {
    this.context = application.getApplicationContext();
    .....
}
public void saveQuesLocally(QuesDto quesDto) {
    QuizRoomDB db = QuizRoomDB.getDatabase(context);
    QuizDao quizDao = db.wordDao();
    Log.d(N.Room, "QuestionRepository. inside saveQuesLocally");
    new Thread(() -> {           
        QuizRoomDB.dbWriteExecutor.execute(()-> quizDao.insert(quesDto));
    }).start();
}

Gracias por tu ayuda.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La excepción “java.lang.IllegalArgumentException: La versión debe ser >= 1, era 0” sugiere que la versión especificada en la clase de base de datos Room es incorrecta.

    En la clase QuizRoomDB, actualmente la versión está establecida en 0:

    @Database(entities = {QuesDto.class}, version = 0, exportSchema = false)

    Para solucionar este problema, la versión debe actualizarse a 1 o a un número más alto de esta manera:

    @Database(entities = {QuesDto.class}, version = 1, exportSchema = false)

    Esto asegurará que la base de datos Room tenga la versión adecuada y pueda manejar futuras actualizaciones del esquema de entidad. Después de actualizar el número de versión, la aplicación deberá ser recompilada y el error debería resolverse.

Comments are closed.