2014-12-27 44 views
7

Próbujesz rozszerzyć klasę o SQLiteOpenHelper, ale pojawia się ten błąd: "Brak domyślnego konstruktora w android.database.sqlite.SQLitepenhelper "wraz z innymi«nie może rozwiązać symbol kategorii, Uwaga, ...»"Nie ma domyślnego konstruktora dostępnego w android.database.sqlite.SQLitepenhelper" w Android Studio

class DbHelper extends SQLiteOpenHelper { 


    @Override 
    public void onCreate(SQLiteDatabase db) { 

     db.execSQL(Category.getSql()); 
     db.execSQL(Note.getSql()); 
     db.execSQL(Attachment.getSql()); 
     db.execSQL(CheckItem.getSql()); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("DROP TABLE IF EXISTS " + Category.TABLE_NAME); 
     db.execSQL("DROP TABLE IF EXISTS " + Note.TABLE_NAME); 
     db.execSQL("DROP TABLE IF EXISTS " + Attachment.TABLE_NAME); 
     db.execSQL("DROP TABLE IF EXISTS " + CheckItem.TABLE_NAME); 

     onCreate(db); 
    } 

Odpowiedz

13

trzeba określić wyraźne konstruktora sobie, że wywołuje 4- lub 5-Arg super konstruktora SQLiteOpenHelper.

Na przykład:

public DbHelper(Context context) { 
    super(context, "database.db", null, 1); 
} 

gdzie database.db to nazwa pliku bazy danych i 1 jest wersja.

+0

Miałem to samo pytanie klasa WebView, ale i tak odpowiedziałem na moje pytanie. Dzięki! – Seth

2

Jeśli DBHelper dziecko wtedy ten post pomaga, othervise można allready understandfirst zdefiniować go jak ten na zewnątrz ciebie klasie oznacza uperside ...

private DBHelper ourHelper; 
private final Context ourContext; 

Następnie użyć tego

class DbHelper extends SQLiteOpenHelper { 
public DBHelper(Context context) { 
     super(context, DB_NAME, null, DB_VIRSION); 
     // TODO Auto-generated constructor stub 
    } 

@Override 
public void onCreate(SQLiteDatabase db) { 

    db.execSQL(Category.getSql()); 
    db.execSQL(Note.getSql()); 
    db.execSQL(Attachment.getSql()); 
    db.execSQL(CheckItem.getSql()); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP TABLE IF EXISTS " + Category.TABLE_NAME); 
    db.execSQL("DROP TABLE IF EXISTS " + Note.TABLE_NAME); 
    db.execSQL("DROP TABLE IF EXISTS " + Attachment.TABLE_NAME); 
    db.execSQL("DROP TABLE IF EXISTS " + CheckItem.TABLE_NAME); 

    onCreate(db); 
} 

A następnie spróbuj tego kontekstu dla twojej rodzicielskiej klasy

public MyDatabase(Context c){ 
    ourContext=c; 
}