Я хочу загрузить данные из Firebase Firestore (массив имен), создать таблицу SQL и заполнить таблицу данными с сервера. И каждый раз, когда я запускаю приложение, я проверяю номер версии из firebase, если он совпадает с версией базы данных SQL, и если это не так, я воссоздаю таблицу и заполняю ее новыми данными.
Проблема в том, что ясделал что-то не так с созданием и проверкой номера версии, поэтому я получаю
android.database.sqlite.SQLiteException: Невозможно понизить версию базы данных с версии 5 до 4.
Это исключение довольно простое, но я не знаю, где я испортил.
Это мой SQLiteOpenHelper
класс
public class SQLBazaNamirnica extends SQLiteOpenHelper {
private static final String Ime_Baze = "baza_namirnica";
private static final String IME_TABELE = "tabela_namirnica";
private static final String ID_KOLONA = "id";
private static final String NAMIRNICA_KOLONA = "namirnica";
private static int VERZIJA_BAZE = 4;
SQLiteDatabase db;
Context context;
public SQLBazaNamirnica(Context context) {
super(context, Ime_Baze, null, VERZIJA_BAZE);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
this.db = sqLiteDatabase;
String kreirajTabelu = "CREATE TABLE " + IME_TABELE +
" (" + ID_KOLONA + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
NAMIRNICA_KOLONA + " TEXT )";
db.execSQL(kreirajTabelu);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int staraV, int novaV) {
if(staraV != novaV)
sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + IME_TABELE);
}
boolean CheckVerziju(int novaVer) {
//db = getWritableDatabase();
SQLiteDatabase _db = this.getWritableDatabase();
Log.d("SQL VERZIJA", "CheckVerziju: VERZIJA BAZE: " + _db.getVersion() + " \n VERZIJA FIREBASE BAZE: " + novaVer);
if(_db.getVersion() != novaVer) {
//VERZIJA_BAZE = novaVer;
_db.setVersion(novaVer);
return true;
} else return false;
}
void KreirajTabelu() {
SQLiteDatabase db = this.getWritableDatabase();
db.execSQL("DROP TABLE IF EXISTS " + IME_TABELE);
String kreirajTabelu = "CREATE TABLE " + IME_TABELE +
" (" + ID_KOLONA + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
NAMIRNICA_KOLONA + " TEXT )";
db.execSQL(kreirajTabelu);
Log.d("SQL", "KreirajTabelu: BAZA JE KREIRANA");
}
void updateBazu(SQLiteDatabase db, ArrayList<String> namirnice) {
db = getWritableDatabase();
ContentValues cv = new ContentValues();
for(String namirnica : namirnice) {
/* String query = "INSERT INTO " + IME_TABELE + " (" +
NAMIRNICA_KOLONA + ") VALUES (" + namirnica + ")"; */
cv.put(NAMIRNICA_KOLONA, namirnica);
db.insert(IME_TABELE, null, cv);
}
}
}
И вот как я проверяю номер версии:
bazaNamirnica = new SQLBazaNamirnica(MainActivity.this);
namirniceDokument.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
@Override
public void onSuccess(DocumentSnapshot documentSnapshot) {
if(documentSnapshot.exists()) {
int verzijaBaze = documentSnapshot.getLong("verzija").intValue();
if(bazaNamirnica.getReadableDatabase().getVersion() != verzijaBaze) {
//bazaNamirnica.ve
bazaNamirnica.KreirajTabelu();
Map<String, Object> namirnice = documentSnapshot.getData();
ArrayList<String> namirniceFinal = new ArrayList<>();
for(Map.Entry<String, Object> namirnica : namirnice.entrySet()) {
namirniceFinal.add(namirnica.getValue().toString());
}
bazaNamirnica.updateBazu(bazaNamirnica.getWritableDatabase(), namirniceFinal);
bazaNamirnica.getWritableDatabase().setVersion(verzijaBaze);
}