Comment utiliser un contrat de classe dans android?
Je suis un peu confus parce que je ne sais pas comment je dois interpréter le tutoriel ici: http://developer.android.com/training/basics/data-storage/databases.html#DbHelper
Mon code jusqu'à ce que ressemble maintenant à ceci:
public final class DatabaseContract {
//To prevent someone from accidentally instantiating the contract class,
//give it an empty constructor.
public DatabaseContract() {}
public static abstract class Table1 implements BaseColumns {
public static final String TABLE_NAME = "nameOfTable";
public static final String COLUMN_NAME_COL1 = "column1";
public static final String COLUMN_NAME_COL2 = "column2";
public static final String COLUMN_NAME_COL3 = "column3";
}
public class DatabaseHelper extends SQLiteOpenHelper {
//If you change the database schema, you must increment the database version.
public static final int DATABASE_VERSION = 1;
public static final String DATABASE_NAME = "database.db";
private static final String TEXT_TYPE = " TEXT";
private static final String COMMA_SEP = ",";
private static final String SQL_CREATE_ENTRIES = "CREATE TABLE " +
Table1.TABLE_NAME + " (" +
Table1._ID + " INTEGER PRIMARY KEY," +
Table1.COLUMN_NAME_COL1 + TEXT_TYPE + COMMA_SEP +
Table1.COLUMN_NAME_COL2 + TEXT_TYPE + COMMA_SEP +
Table1.COLUMN_NAME_COL3 + TEXT_TYPE + COMMA_SEP + " )";
private static final String SQL_DELETE_ALL_ENTRIES = "DROP TABLE IF EXISTS " + Table1.TABLE_NAME;
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
//Method is called during creation of the database
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(SQL_CREATE_ENTRIES);
}
//Method is called during an upgrade of the database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(DatabaseHelper.class.getName(), "Upgrading database from version " + oldVersion + " to " + newVersion + ", which will destroy all old data");
db.execSQL(SQL_DELETE_ALL_ENTRIES);
onCreate(db);
}
}
}
Je n'ai interprété à droite ou à avoir les 6 premières variables dans la classe Helper être à l'extérieur dans la classe de Contrat?
Ou devrait la Classe Helper ne pas être un intérieur de classe de la classe de contrat?
Espère que vous pourrez m'aider
- La classe helper n'est pas une partie de businessobjects...
- donc je doit faire une propre Fichier de la classe Helper?
Vous devez vous connecter pour publier un commentaire.
Votre contrat essentiellement définit votre base de données et la façon dont les gens interagissent avec elle par le Fournisseur de Contenu.
Cela dit, vous n'avez pas nécessairement besoin d'un Fournisseur de Contenu à utiliser un Contrat de classe. Mon exemple contient les constantes qui sont utilisés par le Fournisseur de Contenu (MIME et URI pièces). Si vous n'êtes pas à l'aide d'un Fournisseur de Contenu, vous n'avez pas besoin de ces sections.
J'aime à penser que le contrat de la classe comme un schéma de base de données, ou en d'autres termes, quelque chose qui définit la façon dont votre base de données est mis en place. Vous remarquerez peut-être que tout à l'intérieur de la classe de contrat est déclarée comme statique. C'est parce que vous ne serez jamais à l'instanciation d'une classe de Contrat, mais seulement en se référant à l'une des constantes définies dans il. Vous pouvez le voir dans mon exemple que mon Contrat de catégorie a juste un tas de static final variables déclarées. Cette classe de Contrat peut être son propre fichier, par exemple: mon fichier est appelé TransitContract.java.
Disons par exemple que vous vouliez changer le nom de l'une de vos colonnes. Plutôt que de faire des modifications à plusieurs fichiers, tout ce que vous avez à faire est de changer la valeur de la colonne dans le contrat de la classe.
Vous n'êtes pas effectuer tout type de travail de calcul à l'intérieur de la classe de contrat.
La SQLLiteOpenhelper classe sur l'autre main est quelque chose qui a été fourni par Google pour travailler avec des bases de données plus facile. C'est là que vous mettre en œuvre des méthodes pour créer et configurer la base de données initiale. Voir http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html. Après la mise en œuvre de ces méthodes, tout ce que vous avez à faire est d'instancier une instance de votre classe d'aide, et ensuite appeler helperClassInstance.getWriteableDatabase() (ou getReadableDataBase()) et puis votre assistant de classe prend automatiquement soin de créer une nouvelle base de données si nécessaire, ou le retour de celui qui existe déjà, etc.
Cette aide est généralement mise en œuvre interne de la classe, mais pourrait être sa propre classe autonome. Il est toutefois vous souhaitez mettre en œuvre.
Je vous recommande vivement de regarder l'exemple le bloc-notes que Google fournit, comme il a un assez bon exemple de comment il est possible de définir un contrat de classe. Veuillez noter qu'ils utilisent également un Fournisseur de Contenu. Si vous êtes intéressés à en apprendre sur les Fournisseurs de Contenu, je vous recommande de lire un peu plus à http://developer.android.com/guide/topics/providers/content-provider-basics.html. Il va beaucoup plus en profondeur les Fournisseurs de Contenu et Contrat de classes.
Voici un exemple d'utilisation de votre code. Je n'ai pas fait de test de ce code de sorte qu'il peut contenir des erreurs. Comme vous pouvez le voir, vous pouvez instancier votre db helper n'importe où vous le jugez nécessaire. Dans cet exemple, je le fais dans l'activité principale du onCreate, mais en réalité, c'est une mauvaise pratique.
DatabaseContract.java
DatabaseHelper.java
MainActivity.java
Et mon exemple
getWritableDatabase
à la place.