2010-02-18 6 views
0

저는 응용 프로그램에 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"); 
    } 
} 

} 

그리고 더 이상 그게 아니야.

더 좋은 해결책이 있습니까? 또는 내 코드에 결함이있는 이유는 무엇입니까?

+1

당신이 설정하는 것이 가능할 것이다 SQLite에서 테이블을 만들 때의 기본값 (SQLiteOpenHelper 내부)? – ccheneson

+0

아마도 db.insert()를 사용하는 것이 가장 좋은 해결책일까요? –

+1

SQLiteOpenHelper (SQLiteOpenHelper를 사용하는 경우)에서 onCreate 메서드를 사용하여 더 많은 생각을했습니다. 그렇지 않으면 언제든지 바로 테이블을 만들 때마다 – ccheneson

답변

1

SQL 테이블에 기본값을 추가하려면 테이블을 만든 직후에 테이블을 설정하는 것이 가장 좋은 방법이라고 생각합니다. 그래서

당신이에서 onCreate 메소드에서, SQLiteOpenHelper를 사용하는 경우, 당신은 바로 그 값이 한 번만 생성 될 수 있도록 테이블을 만든 후) (db.insert 호출 할 수 있습니다

+0

에 대한 이유가 있습니다. 1.5에서는 작동하지만 1.6에서는 작동하지 않습니까? –

+0

흠 - 이상 하네. db.insert()를 사용하기 때문에 응용 프로그램에서 db에 데이터를 삽입 할 수 있습니까? db.execSQL 및 INSERT 쿼리를 사용하여 기본값을 삽입 할 수도 있습니다 – ccheneson

관련 문제