webentwicklung-frage-antwort-db.com.de

SQLiteOpenHelper kann onCreate nicht aufrufen?

Ich versuche, eine lokale Datenbank auf einem Android-Telefon mit sqlite zu erstellen.

Ich habe eine Helfer-Klasse (siehe unten), mit der die Datenbank erstellt und die "Hilfe" bereitgestellt wird. 

Ich möchte ein Objekt dieser Klasse im Hauptteil meines Codes erstellen und dort auch die Datenbank und die Tabellen erstellen.

Das Problem:

Wenn ich ein Objekt der Klasse erstelle, scheint es nicht, dass die onCreate-Methode im Helfer aufgerufen wird. Ich dachte, das soll passieren. Ich dachte, dass onCreate im Grunde ein Konstruktor für die Klasse ist. (Ich glaube ich irre mich) 

  • Warum ruft es also nicht die onCreate-Methode auf? 
  • Oder wie bekomme ich die Datenbank und die Tabellen, in denen ich das Objekt der Klasse erstellt habe? 
  • Was wäre der bessere Weg, dies zu tun, wenn dies kein guter Ansatz ist?

public class SmartDBHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "smart_lite_db.db";
    private static final int DATABASE_VERSION = 2;
    private static final String NOTIFY_TABLE_NAME = "user_notify_data";
    private static final String HR_TABLE_NAME = "user_hr_data";
    private static final String NOTIFY_TABLE_CREATE = 
        "CREATE TABLE " + NOTIFY_TABLE_NAME + 
        " (counter INTEGER PRIMARY KEY, " + 
        "userresponse INTEGER, " + 
        "notifytime INTEGER);";
    private static final String DATA_TABLE_CREATE = 
        "CREATE TABLE " + HR_TABLE_NAME +
        " (counter INTEGER PRIMARY KEY, " +
        "hr INTEGER, " +
        "act INTEGER, " +
        "timestamp INTEGER);";      

    public SmartDBHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        // TODO Auto-generated constructor stub
    }


    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        Log.v("smartdbhelper", "before creation");
        db.execSQL(NOTIFY_TABLE_CREATE);
        Log.v("smartdbhelper", "middle creation");
        db.execSQL(DATA_TABLE_CREATE);
        Log.v("smartdbhelper", "after creation");
    }


    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub

    }

}

public class SmartApp extends Activity implements OnSharedPreferenceChangeListener {
   private SmartDBHelper dBHelper;
   public void onCreate(Bundle savedInstanceState) {
      //where i am wanting to create the database and tables
      dBHelper = new SmartDBHelper(getContext());
   }
}
28
prolink007

Die Variable onCreate ist kein Konstruktor für die Datenbankklasse. Sie wird nur aufgerufen, wenn Sie versuchen, eine Datenbank zu öffnen, die nicht vorhanden ist .. Um eine Datenbank zu öffnen oder zu erstellen, müssen Sie einer dieser Methoden einen Aufruf hinzufügen:

public class SmartApp extends Activity implements OnSharedPreferenceChangeListener {
   private SmartDBHelper dBHelper;
   public void onCreate(Bundle savedInstanceState) {
      //where i am wanting to create the database and tables
      dBHelper = new SmartDBHelper(getContext());
      // open to read and write
      dBHelper.getWritableDatabase();
      // or to read only
      // dBHelper.getReadableDatabase();
   }
}

Es ist ein bisschen groß, aber hier ist mein DatabaseAdapter, den Sie sich ansehen können: http://saintfeintcity.org/projects/sfc/repository/entry/trunk/src/org/saintfeintcity/database/GameDbAdapter.Java

67
WarrenFaith

Sie müssen getWritableDatabase() oder getReadableDatabase() aufrufen.

14
gngr44

Die Methode oncreate () ist kein Konstruktor und wird auch beim ersten Erstellen der Datenbank aufgerufen. Sie müssen daher getWritableDatabase () oder getReadableDatabase () zum Öffnen oder Erstellen für aufrufen Ihre Datenbank.

getReadableDatabase (): - Eine Datenbank erstellen und/oder öffnen. 

getWritableDatabase (): - Erstellen und/oder öffnen Sie eine Datenbank mit dem Namen wird zum Lesen und Schreiben verwendet.

1
Yohan Malshika