2017-10-13 4 views
1

Je suis nouveau dans la base de données SQLite. J'ai actuellement créé une base de données, mais j'ai deux erreurs dans ma classe d'aide à l'intérieur du constructeur pour la constante DATABASE_NAME et la constante DATABASE_VERSION. L'erreur indique: Impossible de référencer PetDbHelper.DATABASE_NAME avant que le constructeur de supertype ait été appelé. J'ai la même erreur pour la constante DATABASE_VERSION. PetDbHelper.java:J'ai des problèmes dans une classe d'assistance SQLite

public class PetDbHelper extends SQLiteOpenHelper { 

    private final String DATABASE_NAME = "shelter.db"; 
    private final int DATABASE_VERSION = 1; 


    public PetDbHelper(Context context){ 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 

    } 

    @Override 
    public void onCreate(SQLiteDatabase sqLiteDatabase) { 
     String SQL_CREATE_PETS_TABLE = "CRAETE TABLE" + PET_ENTRY.TABLE_NAME + "(" + PET_ENTRY._ID + "INTEGER PRIMARY KEY AUTOINCREMENT," 
      + PET_ENTRY.NAME + "TEXT NOT NULL," + PET_ENTRY.BREED + "TEXT," + PET_ENTRY.GENDER + "INTEGER NOT NULL," 
      + PET_ENTRY.WEIGHT + "INTEGER NOT NULL DEFAULT 0);"; 
     sqLiteDatabase.execSQL(SQL_CREATE_PETS_TABLE); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { 

    } 
} 
+0

faire DATABASE_NAME statique, Database_Version –

+0

j'ai réalisé que ma réponse à appeler 'méthodes super' ne sont pas applicables à cette question, mais vous besoin d'appeler 'super.onCreate (sqLiteDatabase)' et 'super.onUpgrade (sqliteDatabase, i, i1);' pour éviter un crash différent. –

+0

Ok, merci @MichaelDodd –

Répondre

3

Cette variable ne peut être référencé jusqu'à ce que la fonction constructeur mère est initialisé. Lorsque vous ajoutez cette variable au modificateur static, aucune autre erreur n'est signalée.

changement

private final String DATABASE_NAME = "shelter.db"; 
private final int DATABASE_VERSION = 1; 

à

private static final String DATABASE_NAME = "shelter.db"; 
private static final int DATABASE_VERSION = 1; 
+0

Cela fonctionne, mais pourquoi devrais-je faire cela? –

+0

Parce que votre erreur est 'Impossible de référencer PetDbHelper.DATABASE_NAME avant que le constructeur de supertype ait été appelé'. – KeLiuyue

+0

Et il était associé à la séquence d'initialisation de Java. – KeLiuyue