2010-02-18 4 views
0

J'ai une base de données dans mon application qui est utilisée comme ContentProvider.Android - Comment renseigner le fournisseur de contenu une seule fois sur l'application?

Il contient des valeurs de paramètres pour l'application, et lorsque j'installe l'application, je souhaite que ajoute un ensemble de valeurs codées en dur une seule fois.

Voici comment j'essaie de le faire à la minute.

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

Et voici la méthode 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"); 
    } 
} 

} 

Cela fonctionne cependant à chaque fois que l'application démarre, il ajoute un nouveau paramètres objet et je veux seulement à app un objet à l'installation de l'application et c'est plus.

Quelqu'un at-il une meilleure solution pour cela? Ou une raison pour laquelle mon code est défectueux?

+1

Serait-il possible pour vous de régler la valeurs par défaut lors de la création de la table dans SQLite (dans SQLiteOpenHelper peut-être)? – ccheneson

+0

C'est probablement la meilleure solution - en utilisant db.insert()? –

+1

Je pensais plus dans la méthode onCreate de SQLiteOpenHelper (si vous utilisez SQLiteOpenHelper). Sinon juste après chaque fois que vous créez la table – ccheneson

Répondre

1

Si vous voulez ajouter des valeurs par défaut à votre table SQL, je pense que le meilleur moyen serait de les définir juste après la création de votre table.

Donc, si vous utilisez SQLiteOpenHelper, dans la méthode onCreate, vous pouvez appeler db.insert() juste après la création de votre table afin que ces valeurs seront créées juste une fois

+0

est-il une raison pour laquelle cela serait travailler sur 1,5 mais pas sur 1,6? –

+0

Hum - c'est bizarre. Puisque vous utilisez db.insert(), pouvez-vous insérer des données à partir de votre application? Vous pouvez également essayer d'insérer vos valeurs par défaut en utilisant db.execSQL et une requête INSERT – ccheneson

Questions connexes