gpt4 book ai didi

android - 如何将 SQLiteOpenHelper 与 SD 卡上的数据库一起使用?

转载 作者:IT王子 更新时间:2023-10-29 06:19:30 25 4
gpt4 key购买 nike

根据此处和网络扩展应用程序及其继承方法 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.) 向 list 添加扩展应用程序:

<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.) 在我的 Activity 中以通常的方式使用扩展的 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() 没有被调用。

非常感谢任何帮助。

最佳答案

我发现我可以在 Android 2.2 中使用完整路径,但在 2.1 中,Context.openOrCreateDatabase() 方法抛出异常。为了解决这个问题,我包装了该方法以直接调用 SQLiteDatabase.openOrCreateDatabase() 。这是我扩展的 SQLOpenHelper 的构造函数

public class Database extends SQLiteOpenHelper {
public Database(Context context) {
super(new ContextWrapper(context) {
@Override public SQLiteDatabase openOrCreateDatabase(String name,
int mode, SQLiteDatabase.CursorFactory factory) {

// allow database directory to be specified
File dir = new File(DIR);
if(!dir.exists()) {
dir.mkdirs();
}
return SQLiteDatabase.openDatabase(DIR + "/" + NAME, null,
SQLiteDatabase.CREATE_IF_NECESSARY);
}
}, NAME, null, VERSION);
this.context = context;
}
}

关于android - 如何将 SQLiteOpenHelper 与 SD 卡上的数据库一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5742101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com