Android mettre en contexte dans la base de données

J'ai une base de données et j'ai créé un Database classe qui a un private static class DbHelper extends SQLiteOpenHelper pour m'aider à gérer ma base de données.

Cette base de données est l'accès à partir de quatre activités différentes.

J'ai cette public void onCreate(SQLiteDatabase db) que c'est ce qui crée ma base de données les tables et ajoute les valeurs de ces tableaux. Depuis que le programme ne saisissez ici la première fois que l'utilisateur exécute l'application, je veux créer un ProgressDialog.

C'est ce que j'ai:

Override
public void onCreate(SQLiteDatabase db) {

    ProgressDialog progresso = ProgressDialog.show(context, "Info", "Loading DB" );
    //Code to create the tables and add the values
    progress.dismiss();
}

Ai 2 questions.

Première:

Puisque cela peut être accessible à partir de 4 activités différentes, comment puis-je obtenir le contexte?
Décision:

Context context = getAplicationContext();

Deuxième:

Pourquoi ne puis-je pas utiliser de chaînes de strings.xml?
Je ne peux pas faire ceci:

ProgressDialog progresso = ProgressDialog.show(context, getString(R.string.driProgressTitle), getString(R.string.driProgressMessage) );

Mise à JOUR

public class Database {
ProgressDialog progresso;
private DbHelper DBHelper;
private final Context Context;
private SQLiteDatabase BaseDados;
private static class DbHelper extends SQLiteOpenHelper {
public DbHelper(Context context) {
super(context, BD_NAME, null, BD_VERSION);
//TODO Auto-generated method stub
}
@Override
public void onCreate(SQLiteDatabase db) {
//Whanted to show here the progress dialog
new loadDB().execute();
//Creates the table and adds the values
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVesion) {
db.execSQL("DROP TABLE IF EXISTS MYTABLE");
onCreate(db);
}
}
public Database(Context c) {
Context = c;
}
public Database open() throws SQLException {
DBHelper = new DbHelper(Context);
BaseDados = DBHelper.getWritableDatabase();
return this;
}
public void close() {
DBHelper.close();
}
public Cursor getData(int tipo, long groupId, String query[]) {
//Performs the querys to my database
}
return null;
}
public class loadDB extends AsyncTask<Void, Void, Integer> {
@Override
protected Integer doInBackground(Void... params) {
progresso = ProgressDialog.show(Context, Context.getString(R.string.ProgressTitle), Context.getString(R.string.ProgressMessage) );
return 1;
}
@Override
protected void onPostExecute(Integer result) {
progresso.dismiss();
super.onPostExecute(result);
}
}
}

Avec le code ci-dessus, j'obtiens cette erreur No enclosing instance of type Database is accessible. Must qualify the allocation with an enclosing instance of type Database (e.g. x.new A() where x is an instance of Database). dans new loadDB().execute();.

  • Non, vous ne pouvez pas toucher quoi que ce soit liés à l'interface graphique à l'intérieur de doInBackground() méthode. Remplacer onPreExecute() et il y a appel ProgressDialog.show() .
  • Ok. Fait. Mais où dois-je appeler new loadDB().execute();?
  • n'importe où à l'extérieur de loadDB, essentiellement dans onStart() de votre activité.
  • faire de nouvelles loadDB().execute(); dans le onCreate(SQLiteDatabase db) de mon Database class it gives this error: Pas enfermer instance de type Base de données est accessible. Doivent être admissibles à l'allocation avec un enfermant instance de type Base de données (par exemple x.new A() où x est une instance de Base de données).` Faire new loadDB().execute(); dans le onCreate(Bundle savedInstanceState) de ma classe principale/activité, il donne l'erreur: loadDB cannot be resolved to a type. Merci pour votre aide
InformationsquelleAutor Favolas | 2012-08-24