2014-12-27 25 views
7

Provare ad estendere la classe con SQLiteOpenHelper, ma questo errore si presenta: "Non esiste un costruttore predefinito disponibile in android.database.sqlite.SQLitepenhelper "insieme ad altri 'non può risolvere simbolo della categoria, nota, ...'"Non esiste un costruttore predefinito disponibile in android.database.sqlite.SQLitepenhelper" in 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); 
    } 

risposta

13

È necessario definire un costruttore esplicito te stesso che chiama il 4 o 5 arg super costruttore in SQLiteOpenHelper.

Ad esempio:

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

dove database.db è il nome del file di database e 1 è la versione.

+0

Ho avuto la stessa domanda la classe WebView, ma questo ha comunque risposto alla mia domanda. Grazie! – Seth

2

Se il DBHelper figlio allora questo post aiuto, othervise potete giá understandfirst Definire in questo modo uno in al di fuori di voi di classe, significa uperside ...

private DBHelper ourHelper; 
private final Context ourContext; 

quindi utilizzare questo

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); 
} 

E poi prova questo contesto per la tua classe genitore

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