Database
データベースが 1 つあり、データベースの管理に役立つクラスを作成しましたprivate static class DbHelper extends SQLiteOpenHelper
。
このデータベースは、4 つの異なるアクティビティからアクセスされます。
public void onCreate(SQLiteDatabase db)
データベーステーブルを作成し、それらのテーブルに値を追加するのはこれです。プログラムは、ユーザーがアプリを初めて実行したときにここに入るだけなので、ProgressDialog
.
これは私が持っているものです:
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();
}
2 つの質問があります。
初め:
これは 4 つの異なるアクティビティからアクセスできるため、コンテキストを取得するにはどうすればよいですか? 作る:
Context context = getAplicationContext();
2番:
string.xml の文字列を使用できないのはなぜですか? 私はこれを作ることができません:
ProgressDialog progresso = ProgressDialog.show(context, getString(R.string.driProgressTitle), getString(R.string.driProgressMessage) );
アップデート
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);
}
}
}
上記のコードでは、このエラー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).
が発生していnew loadDB().execute();
ます。