getWritableDatabase () не вызывает getDatabasePath (). Он вызывается только внутри getReadableDatabase (). Но getReadableDatabase () сама вызывает getWriteableDatabase (), и если это удается, то часть, которая вызывает getDatabasePath (), никогда не используется. Итак, что я сейчас делаю, это продублирую абстрактный класс SQLiteOpenHelper и изменим эту строку. Да, я знаю о последствиях, о рисках безопасности, которые пользователи должны нажимать Ok, и я бы хотел остаться с SQLiteOpenHelper в целом. Я не публикую это как ответ, потому что это не решение, которое я бы предложил никому.

сно различным ответам, здесь и в веб-приложении расширение и его унаследованный метод getDatabasePath () позволят установить путь к хранилищу базы данных от стандартного расположения внутренней памяти до вставленной SD-карты большего размера.

Это не работает для меня. Предлагаемая конструкция все еще использует базу данных во внутренней памяти. На самом деле метод getDatabasePath () никогда не вызывается SQLiteOpenHelper.

Я хотел бы получить это и запустить.

Вот что я сделал до сих пор:

1.) Расширение приложения:

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.) Добавление расширенного приложения в манифест:

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

3.) Расширение и использование SQLiteOpenHelper:

public class MySqliteOpenHelper extends SQLiteOpenHelper {

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

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

4.) Использование расширенного SQLiteOpenHelper в моей деятельности обычным способом:

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();
  }
}

Я хочу отметить, что расширенный класс Application работает в целом. Я вижу это, потому что MyApplication.onCreate () вызывается. Но MyApplication.getDatabasePath () не вызывается.

Любая помощь высоко ценится.

Ответы на вопрос(6)

Ваш ответ на вопрос