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 () не вызывается.
Любая помощь высоко ценится.