2013-04-19 6 views
3

Я поддерживаю долгое приложение для Android на Android, и я решил изменить модель данных, позади которой он объединяет несколько баз данных SQLite в один новый.Очистить Данные об обновлении

Дело в том, что если я просто создаю новую БД и перестану использовать старые, каждый пользователь приложения там все равно будет иметь старые файлы SQLite в своем локальном хранилище.

Есть ли способ заставить «четкие данные» использовать новую версию приложения? (я ищу «правильный» способ сделать это, я знаю, что я могу проверить, если новая БД существует и действовать в соответствии, но я думаю, что может быть лучше)

Благодаря

+0

Пожалуйста, проверьте ответ как правильный, если помогли вам, чтобы помочь другим тоже :) – Daniel

+0

Это не помогло, проверьте ответ. – Cheborra

ответ

2

Всякий раз необходимо обновить базу данных (например, когда пользователь загружает новую версию приложения), изменение номера версии базы данных вызывает метод onUpgrade(), вы можете переопределить метод thiis с классом SQLiteOpenHelper:

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    Log.w("TaskDBAdapter", "Upgrading from version "+oldVersion 
      +" to "+newVersion 
      +", which will destroy all old data"); 
    for (String string : table_names) 
      db.execSQL("drop table if exists "+ string); 
    onCreate(db); 
} 
+0

Возможно, я ошибаюсь, но это решение не уничтожит БД, а только данные (или таблицы) внутри, и файлы все равно будут там, правильно? – Cheborra

1

Да, вы можете определить BroadcastReceiver за действие MY_PACKAGE_REPLACED. В методе onReceive этого получателя вы можете удалить базы данных. (API12 +)

<receiver 
    android:name=".OnUpgradeReceiver" 
    android:enabled="true" > 
    <intent-filter> 
     <action android:name="android.intent.action.MY_PACKAGE_REPLACED" /> 
    </intent-filter> 
</receiver> 

и BroadcastReceiver

public class OnUpgradeReceiver extends BroadcastReceiver { 
    public OnUpgradeReceiver() { 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     context.deleteDatabase("YOUR_DATABASE_NAME"); 
    } 
} 

отмечает, что это будет срабатывать только в случае обновления (увеличение кода версии в Gradle файле)