저는 응용 프로그램에 ContentProvider로 사용되는 데이터베이스가 있습니다.Android - 앱 설치시 콘텐츠 제공 업체를 한 번만 채우는 방법은 무엇입니까?
응용 프로그램에 대한 설정 값을 보유하고 있으며 응용 프로그램을 설치할 때 값의 하드 코딩 된 값을 한 번만 추가하려고합니다.
이것은 내가 분당하려고하는 방법입니다.
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
아마도 db.insert()를 사용하는 것이 가장 좋은 해결책일까요? –
SQLiteOpenHelper (SQLiteOpenHelper를 사용하는 경우)에서 onCreate 메서드를 사용하여 더 많은 생각을했습니다. 그렇지 않으면 언제든지 바로 테이블을 만들 때마다 – ccheneson