Como usar o SQLiteOpenHelper com banco de dados no cartão SD?

De acordo com várias respostas aqui e na Web, que estende o Aplicativo, e seu método herdado, getDatabasePath () permitiria definir o caminho de armazenamento do banco de dados do local padrão da memória interna para um cartão SD inserido de tamanho maio

Isso não está funcionando para mim. A construção sugerida ainda está usando o banco de dados na memória interna. De fato, o método getDatabasePath () nunca é chamado pelo SQLiteOpenHelper.

Gostaria de colocar isso em funcionament

Aqui está o que eu fiz até agora:

1..) Extensão do aplicativo:

public class MyApplication extends Application {

  @Override
  public File getDatabasePath(String name) {
    // Just a test
    File file = super.getDatabasePath(name);

    return file;
  }

  @Override
  public void onCreate() {
    // Just a test
    super.onCreate();
  }
}

2.) Adicionando aplicativo estendido ao manifesto:

<application
  ...
  android:name="MyApplication" 
  ... >

3.) Estendendo e usando SQLiteOpenHelper:

public class MySqliteOpenHelper extends SQLiteOpenHelper {

  public void onCreate(SQLiteDatabase sqliteDatabase) {
    ...
  }

  @Override
  public void onUpgrade(SQLiteDatabase sqliteDatabase, int oldVersion, int newVersion) {
    ...
  }
}

4.) Usando o SQLiteOpenHelper estendido em minhas Atividades da maneira usual:

public class MyActivity extends Activity {

  private MySqliteOpenHelper mySqliteOpenHelper;
  private SQLiteDatabase     sqliteDatabase;

  @Override
  public void onCreate(Bundle bundle) {
    super.onCreate(bundle);
    ...
    mySqliteOpenHelper = new MySqliteOpenHelper(getApplicationContext());
    sqliteDatabase = mySqliteOpenHelper.getReadableDatabase();
    ...
  }

  @Override
  protected void onDestroy() {
    if (mySqliteOpenHelper != null) {
      mySqliteOpenHelper.close();
      mySqliteOpenHelper = null;
    }

    super.onDestroy();
  }
}

Quero ressaltar que a classe Application estendida está funcionando em geral. Eu posso ver isso porque MyApplication.onCreate () é chamado. Mas MyApplication.getDatabasePath () não é chamado.

Qualquer ajuda é muito apreciada

questionAnswers(6)

yourAnswerToTheQuestion