Android - 如何在App安装上仅填充Content Provider一次?

时间:2010-02-18 14:40:20

标签: android arrays settings android-contentprovider

我的应用程序中有一个用作ContentProvider的数据库。

它包含应用程序的设置值,以及安装应用程序时的设置值 希望它只添加一组硬编码值。

这就是我试图在那一刻做的事情。

 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 个答案:

答案 0 :(得分:1)

如果要在SQL表中添加默认值,我认为最好的方法是在创建表后立即设置它们。

因此,如果您正在使用SQLiteOpenHelper,则在onCreate方法中,您可以在创建表后立即调用db.insert(),以便只创建一次这些值