Domanda

Ho un database nella mia applicazione che viene utilizzato come un ContentProvider.

Essa detiene valori delle impostazioni per l'applicazione, e quando si installa l'applicazione, ho desidera aggiungere un hardcoded insieme di valori solo una volta.

Questo è come io sto cercando di farlo al minuto.

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

E questo è il addNewSettings metodo:

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");
   }
 }

}

Questo funziona però ogni volta che viene avviato l'applicazione aggiunge un nuovo oggetto impostazioni e io lo voglio solo per app UN oggetto al momento dell'installazione dell'applicazione e thats non di più.

Qualcuno ha una soluzione migliore per questo?O un motivo per cui il mio codice è difettoso?

È stato utile?

Soluzione

Se si desidera aggiungere i valori di default per la vostra tabella di SQL, penso che il modo migliore sarebbe quello di metterli nel giusto dopo la creazione di una tabella.

Quindi, se si utilizza SQLiteOpenHelper, nel metodo onCreate, è possibile chiamare db.insert() subito dopo aver creato la tabella in modo che tali valori verranno creati una sola volta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top