根据这里和网络扩展应用程序中的各种答案及其继承的方法 getDatabasePath() 将允许设置从标准内部存储器位置到插入的更大尺寸的 SD 卡的数据库存储路径。
这对我不起作用。建议的构造仍然使用内存上的数据库。事实上,SQLiteOpenHelper 永远不会调用 getDatabasePath() 方法。
我想让这个启动并运行。
这是我到目前为止所做的:
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() 未被调用。
非常感谢任何帮助。