Метод в классе Database вызывается автоматически без цели - PullRequest
0 голосов
/ 14 февраля 2019

Я создал класс базы данных sqtlite с onCreate, onUpgrade и getData.Проблема после того, как код в onCreate() был выполнен, он автоматически перепрыгнул на код в getData() и выполнил в нем вещи.Я не знаю, почему это так.Я ценю все ответы

Я пытался поставить db.close() сразу после этого insert() метода, но это вызвало ошибки

  public class CookingDatabase extends SQLiteOpenHelper {
private static final String DB_NAME="Cooking";
private static final int DB_VERSION = 1;
private ArrayList<Food>foods= new ArrayList<>();

// Database Constructor
public CookingDatabase(Context context) {
    super(context, DB_NAME,null, DB_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
    updateDatabase(db,0,DB_VERSION) // after this line, it jumped to the code in getData();
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    updateDatabase(db,oldVersion,newVersion);
}

private void insert(SQLiteDatabase db,String name,String recipe, int imageID, int favortie)
{
    ContentValues cookingValue = new ContentValues();
    cookingValue.put(DBContract.CookingDB.COLUMN_NAME,name);
    cookingValue.put(DBContract.CookingDB.COLUMN_DESCRIPTION,recipe);
    cookingValue.put(DBContract.CookingDB.COLUMN_IMAGEID,imageID);
    cookingValue.put(DBContract.CookingDB.COLUMN_FAVORITE,favortie);
    db.insert(DBContract.CookingDB.TABLE_NAME,null,cookingValue);
}

private void updateDatabase(SQLiteDatabase db,int oldVer, int newVer){

    if(oldVer < 1){
        try{
            db.execSQL(DBContract.CookingDB.CREATE_TABLE);
            insert(db,"Pizza","Bake in 10 minutes",R.drawable.pizza,0);
            insert(db,"Steak","Salt and pepper",R.drawable.steak,0);
            insert(db,"Sushi","Fresh Salmon",R.drawable.sushi,0);
        }
       catch (Exception e){
            e.printStackTrace();
       }
    }

}

public ArrayList<Food> getData(){
     SQLiteDatabase db = this.getReadableDatabase(); // it goes here
    String row="select * from " + DBContract.CookingDB.TABLE_NAME+" ORDER BY "
            +DBContract.CookingDB._ID +" DESC";
    Cursor cursor = db.rawQuery(row,null);
    if(cursor != null) {
        if (cursor.moveToFirst()) {
            do {
                foods.add(new Food(cursor.getString(cursor.getColumnIndex(DBContract.CookingDB.COLUMN_NAME)),
                        cursor.getString(cursor.getColumnIndex(DBContract.CookingDB.COLUMN_DESCRIPTION)),
                        cursor.getInt(cursor.getColumnIndex(DBContract.CookingDB.COLUMN_IMAGEID)),
                        cursor.getInt(cursor.getColumnIndex(DBContract.CookingDB.COLUMN_FAVORITE))));
            } while (cursor.moveToNext());
        }
    }
    cursor.close();
    db.close();
    return foods;
  }

}

Я просто хочу создать базу данных, и я позвонюgetData() метод позже

1 Ответ

0 голосов
/ 14 февраля 2019

Попробуйте добавить метод finish () после метода updateDatabase () в onCreate ().

Надеюсь, это поможет !!

...