2010-02-18 78 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

相关问题