2010-02-18 77 views
0

我的應用程序中有一個用作ContentProvider的數據庫。Android - 如何在應用程序安裝上僅填充一次Content Provider?

它保存應用程序的設置值,當我安裝應用程序時,我想讓它只添加一組硬編碼的值。

這就是我試圖在一分鐘內做到這一點。

if(settings.size()<= 0){ 
    Settings s = new Settings("voipusernameTa", "xxxxxxxxx", "xxxxx", 
    "displayNameTa", "sip.networks.com", "sip.networks.com", "siprealmTa", 120); 
    addNewSettings(s); 
} 

這是addNewSettings方法:

private void addNewSettings(Settings _settings) { 
    ContentResolver cr = getContentResolver(); 

    String w = CiceroSettings._ID + " = " + _settings.get_Id(); 
    Log.d("ADDNEW SETTINGS", "new setting id =" + _settings.get_Id()); 

    Cursor c = cr.query(CiceroSettings.CONTENT_URI, null, w, null, null); 
    Log.d("CURSOR", "cursor created"); 

    int dbCount = c.getCount(); 
    c.close(); 

    if (dbCount == 0){ 
    ContentValues values = new ContentValues(); 

    values.put(Settings._ID, _settings.get_Id()); 
    values.put(Settings.VOIPUSERNAME, _settings.getVoipUserName()); 
    values.put(Settings.VOIPAUTHID, _settings.getVoipAuthId()); 
    values.put(Settings.PASSWORD, _settings.getPassword()); 
    values.put(Settings.VOIPDISPLAYNAME, _settings.getVoipDisplayName()); 
    values.put(Settings.SIPPROXYSERVER, _settings.getSipProxyServer()); 
    values.put(Settings.SIPREGISTRAR, _settings.getSipRegistrar()); 
    values.put(Settings.SIPREALM, _settings.getSipRealm()); 
    values.put(Settings.EXPIRESTIME, Integer.toString(_settings.getExpiresTime())); 
    Log.d("CURSOR", "Values assigned"); 
    cr.insert(CiceroSettings.CONTENT_URI, values); 
    Log.d("CURSOR", "Values inserted"); 
    } 
} 

} 

然而,這每一個應用程序啓動時,它增加了一個新的設置對象,我只希望它在安裝應用程序的應用設置一個對象時工作這就是它不再。

有沒有人有更好的解決方案呢?或者我的代碼有缺陷的原因?

+1

纔有可能爲您設置在SQLite中創建表時的默認值(也許SQLiteOpenHelper內)? – ccheneson 2010-02-18 15:02:11

+0

這可能是最好的解決方案 - 使用db.insert()? – 2010-02-18 15:17:19

+1

我更想從SQLiteOpenHelper的onCreate方法(如果您使用SQLiteOpenHelper)。否則,只要你創建表格 – ccheneson 2010-02-18 15:19:53

回答

1

如果你想添加默認值到你的SQL表中,我認爲最好的方法是在創建表之後立即設置它們。

所以,如果你正在使用SQLiteOpenHelper,在onCreate方法,你可以創建表格,使得這些值將創建了一次,之後立即致電db.insert()

+0

是否有任何理由爲什麼這會工作在1.5而不是1.6? – 2010-02-23 09:44:23

+0

嗡嗡 - 這很奇怪。既然你使用db.insert(),你可以從你的應用程序插入任何數據到數據庫?您還可以嘗試使用db.execSQL和INSERT查詢來插入默認值 – ccheneson 2010-02-23 11:31:31

相關問題