我的應用程序中有一個用作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");
}
}
}
然而,這每一個應用程序啓動時,它增加了一個新的設置對象,我只希望它在安裝應用程序的應用設置一個對象時工作這就是它不再。
有沒有人有更好的解決方案呢?或者我的代碼有缺陷的原因?
纔有可能爲您設置在SQLite中創建表時的默認值(也許SQLiteOpenHelper內)? – ccheneson 2010-02-18 15:02:11
這可能是最好的解決方案 - 使用db.insert()? – 2010-02-18 15:17:19
我更想從SQLiteOpenHelper的onCreate方法(如果您使用SQLiteOpenHelper)。否則,只要你創建表格 – ccheneson 2010-02-18 15:19:53