[英]Android SQLite database sharing across activities
背景信息:Android新手,不是Java新手。
我正在編寫一個與默認的Android sms應用程序分開發送自己消息的應用程序。 由於我的應用程序不是默認應用程序,因此無法寫入Android的provider.sms.outbox,這絕對可以。 要解決此問題,我正在創建一個SQLite數據庫來存儲應用程序的傳出消息(在消息對象中)。 我正在努力尋找一個很好的,詳細的解釋/教程,以了解如何創建一個可用於我所有活動的SQLite數據庫。 我只有2個活動; 一種讀取數據庫,另一種讀取/寫入數據庫。
我知道我需要創建SQLiteOpenHelper的子類,並且有:
public class dbHelper extends SQLiteOpenHelper {
//Database Info
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "outgoingMsgs.db";
public static final String TABLE_MESSAGES = "messages";
//Table Info
public static final String COLUMN_ID = "id";
public static final String COLUMN_SEND_TO_NAME = "send_to_name";
public static final String COLUMN_SEND_TO_NUM = "send_to_num";
public static final String COLUMN_BODY = "msg_body";
public dbHelper(Context context){
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
//table creation...
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_MESSAGES_TABLE = "CREATE TABLE " + TABLE_MESSAGES +
"(" + COLUMN_ID + " INTEGER PRIMARY KEY," + COLUMN_SEND_TO_NAME + " TEXT," +
COLUMN_SEND_TO_NUM + " TEXT," + COLUMN_BODY + " TEXT" + ")";
db.execSQL(CREATE_MESSAGES_TABLE);
}
//database version upgrade... destroys old and recreates
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_MESSAGES);
onCreate(db);
}
//adds single record
public void addRecord(myMessage msg){
SQLiteDatabase dbase = this.getWritableDatabase();
ContentValues vals = new ContentValues();
//fill vals with appropriate content
vals.put(COLUMN_SEND_TO_NAME, msg.get_name());
vals.put(COLUMN_SEND_TO_NUM, msg.get_number());
vals.put(COLUMN_BODY, msg.getBody());
//insert
dbase.insert(TABLE_MESSAGES, null, vals);
dbase.close();
}
public int getRecordCount(){
String countQuery = "SELECT * FROM " + TABLE_MESSAGES;
SQLiteDatabase dbase = this.getReadableDatabase();
Cursor cursor = dbase.rawQuery(countQuery, null);
cursor.close();
return cursor.getCount();
}
//deletes a single record
public void deleteRecord(myMessage msg){
SQLiteDatabase dbase = this.getWritableDatabase();
dbase.delete(TABLE_MESSAGES, COLUMN_ID + " = ?",
new String[] { String.valueOf(msg.get_id()) });
dbase.close();
}
}
現在,我的問題是我無法弄清楚在哪個活動中(甚至在一個活動中,甚至在一個活動中),或者如何創建dbHelper實例以使其在我的兩個活動中都可用。 我知道單例模式經常使用,並且ContentProvider方法是首選。 我不具備使用Android有限的知識准備使用ContentProviders的能力,因此我想探索單例方法。 誰能幫我完成這個過程?
我應該如何創建dbHelper的實例以使其在我的2個活動中可用
為了什么? 您可以為每個Activity
創建一個新實例,因為它們使用的是相同的數據庫( outgoingMsgs.db
)。
例如,如果您在Activity
A中調用addRecord
並在Activity
B中使用dbHelper
的另一個實例來調用getRecordCount
,則將選擇插入的數據。
您可以使用這樣的Abstract類。
公共抽象類DBAbstract擴展了Activity {private DBHelper mDBHelper;
protected DBHelper getHelper(){
if(mDBHelper == null){
mDBHelper = OpenHelperManager.getHelper(this, DBHelper.class);
}
return mDBHelper;
}
protected int getDBVersion(){
return mDBHelper.getDatabaseVersion();
}
@Override
protected void onDestroy(){
super.onDestroy();
if(mDBHelper != null){
OpenHelperManager.releaseHelper();
mDBHelper = null;
}
}
並在您的新活動中使用它。
public class YourActivity extends DBAbstract
我正在使用它,並且運行良好
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.