Bunun nasıl yapılacağı konusunda biraz kafam karıştı. İşte benim DatabaseHelper sınıftır:Android'de Sqlite veritabanı için Singleton desenini kullanma
public class DatabaseProcessor {
private SQLiteDatabase mDatabase;
private DatabaseHelper mSQLHelper;
private Context mContext;
public DatabaseProcessor(Context context) {
mContext = context;
mSQLHelper = new DatabaseHelper(mContext);
}
private void open() throws SQLException {
mDatabase = mSQLHelper.getWritableDatabase();
}
private void close() {
mDatabase.close();
}
public void insertSomethingIntoDb(String key) {
ContentValues values = new ContentValues();
values.put("some_column_name", name);
open();
mDatabase.insert("some_table_name", null, values);
close();
}
...
Ve bu doğru ise, nasıl düzgün bir db yöntemi çağırmak yok:
public class DatabaseHelper extends SQLiteOpenHelper {
private static DatabaseHelper mInstance = null;
private static final String DB_NAME = "database.db";
private static final int DB_VERSION = 1;
private Context mContext;
public static DatabaseHelper getInstance(Context context) {
if (mInstance == null) {
mInstance = new DatabaseHelper(context.getApplicationContext());
}
return mInstance;
}
public DatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
mContext = context;
}
...
bu hak olduğunu varsayarsak, bu sorgulama sınıfını işlemek için doğru yoldur Herhangi bir yerde etkinlik, parça, vb. gibi başka bir yerden.
Ben de bu kurucuyu özel yapmayı düşündüm (birkaç örnek çevrimiçi kamuya açıktı, ben de öyle yaptım), ama bunu duyduğuma sevindim. Öyleyse kodun içinde bir yerde olduğunu söyleyelim, nasıl 'insertSomethingIntoDb' diye adlandırırsınız? DatabaseProcessor db = new DatabaseProcessor (getActivity()); 've sonra' db yapar mıyım? insertSomethingIntoDb ("some_key"); '? – KaliMa
"getInstance (...)" yöntemi "statik" olduğundan, bunu yapabilirsin 'DatabaseHelper.getInstance (context) .insertSomethingIntoDb (...)' – Titus
Teknik olarak bu şekilde yapamam, işlev İşlemci sınıfında – KaliMa