Android - Как заполнить контент-провайдер только один раз при установке приложения? - PullRequest
0 голосов
/ 18 февраля 2010

У меня в приложении есть база данных, которая используется в качестве 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 Ответ

1 голос
/ 18 февраля 2010

Если вы хотите добавить значения по умолчанию в вашу таблицу SQL, я думаю, что лучшим способом было бы установить их сразу после создания таблицы.

Так что, если вы используете SQLiteOpenHelper, в методе onCreate выможет вызвать db.insert () сразу после создания таблицы, так что эти значения будут созданы только один раз

...