2014-07-19 4 views
0

내 앱이 수행하는 작업입니다. 인터넷 목록에 위치 정보가있는 파일이 있습니다. 해당 파일을로드하고 휴대 전화의 데이터베이스에 위치를 저장합니다. 또한 매 24 시간마다 동일한 파일을 다운로드하고 업데이트가 있는지 확인합니다. 내가하고 싶은 일은 다음에 있습니다. 파일의 현재 버전을 그 파일에 넣고 싶습니다. 다운로드 할 때 이전 버전과 버전을 비교하고, 다른 경우 현재 테이블을 삭제하고로드하려고합니다 모든 위치가 다시 나타납니다.앱 실행 중 데이터베이스 업데이트

현재 내 앱은 다음을 수행하고 있습니다. IntentService를 트리거하는 알람이있어서 파일을 다운로드 한 다음 데이터베이스에있는 각 위치를 확인하고 그렇지 않은 경우에는 삽입합니다.

내가 원한다면 : IntentService는 먼저 다운로드 한 파일의 버전이 이전 버전과 다른지 확인하고, 파일의 버전이 이전 버전과 다른지 확인한 다음 테이블을 삭제하고 파일의 모든 위치를 새 테이블에 삽입합니다.

저는 ContentProvider 및 SQLiteOpenHelper를 사용하여 데이터베이스를 관리하고 있습니다. 나는 어떻게 든 SQLiteOpenHelper의 onUpgrade 메서드를 트리거해야한다고 생각하지만 정확히 어떻게 해야할지 모르겠다.

도움을 주시면 감사하겠습니다.

답변

0

데이터베이스를 업데이트하고 데이터베이스 버전을 늘리는 것을 잊지 말고 모든 데이터베이스 작업 (ALTER TABLE, DROP 등) 필수 항목을 onUpgrade 메소드에 넣어야합니다.

데이터베이스 버전을 늘리면 onUpgrade 메서드는 업데이트 후 응용 프로그램이 처음 시작될 때 자동으로 호출됩니다.

편집 :

당신은 데이터베이스 버전 설정하는 정적 필드를 사용할 수 있습니다

private static final int DATABASE_VERSION = 2; 

및 슈퍼 생성자에 전달합니다

super(context, DATABASE_NAME, null, DATABASE_VERSION); 

와 당신이 필요로하는 DATABASE_VERSION을 증가 데이터베이스를 업데이트하십시오 (onUpgrade 호출).

+0

즉, SQLiteOpenHelper의 생성자에서 증가 된 데이터베이스 버전을 넣어야한다는 의미입니까? – davidmilicevic97

+0

예, 정적 필드를 사용하여 데이터베이스 버전을 설정하는 것이 좋습니다. 그리고 인수로 슈퍼 생성자로 전달 –

+0

하지만 내 문제는 ContentProvider의 onCreate 메서드에서 해당 생성자를 호출하는 것이므로 응용 프로그램이 시작될 때 onCreate가 호출된다고 생각합니다. 어디에서 그 생성자를 호출해야합니까? 내 코드를 넣을 수 있으면 편리하다. – davidmilicevic97

관련 문제