如何使用 SQLiteOpenHelper 与 sd 卡上的数据库?

2024-04-14

根据这里和网络扩展应用程序中的各种答案及其继承的方法 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() 未被调用。

非常感谢任何帮助。


我发现我可以在 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;
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 SQLiteOpenHelper 与 sd 卡上的数据库? 的相关文章

  • Android EditText 和 addTextChangedListener

    我目前正在将数据库管理器移植到 Android 由于性能原因 我喜欢 仅更新已修改的属性 我尝试使用 addTextChangedListener 执行此操作 以便将修改后的条目添加到列表中 但我的程序从未输入其任何方法 EditText
  • 如何访问 Android 心率传感器原始数据? (反射光,不是心跳)

    心率传感器上的 android sdk 仅返回计算出的 bpm 我对此不感兴趣 我需要访问 Android 心率传感器原始数据 例如就反射值的强度而言将会很大 因为心率传感器基本上使用 LED 并测量随时间变化的反射率 如果可能 访问由任何
  • 如何制作像 Google+ 应用程序中那样的气泡? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 有谁知道如何使用 Google An
  • 通过代码在创建时突出显示 ListView 项目

    我想在创建 listView 时突出显示 ListView 的第一行 0 我尝试了不同的方法 就像您在注释代码中看到的那样 但没有任何效果 这很奇怪 因为 OnItemClickListener 中的突出显示工作正常 它通过 xml 选择器
  • 无法在 Android Studio 中导出签名的 APK

    当我使用keytool list keystore path to keyfile jks并提供我的密码 我可以看到那里的条目 但是当我在尝试使用相同的密码生成签名的 APK 时使用相同的密码时 我收到错误 无法加载密钥库 密钥库被篡改 或
  • 当我单击“完成”键时,Android OnEditorActionListener() actionId 给出 0

    我创建了一个键盘 当用户输入数字时 它会输入特定的 EditText 但是当用户单击Done关键 它没有去setOnEditorActionListener但它关闭了键盘 这是我的代码 final EditText txtQty new E
  • CoordinatorLayout 和 ImageView 在滚动时调整宽度的问题

    我正在尝试放置一个ImageView in a CollapsingToolbarLayout它在加载时占据整个屏幕 并且当您滚动内容时 16x9 分辨率图像宽度会调整大小 直到图像占据屏幕的整个宽度 那时 我希望图像具有视差app lay
  • 更改语言 Flutter 的按钮

    我正在 Flutter 中构建一个应用程序 到目前为止 我正在使用 JSON 国际化 其中应用程序的语言基于用户手机中默认的语言 它工作得很好 但我想给用户有机会在不更改手机系统语言设置的情况下更改语言 只需单击按钮 然后应用程序即可更改语
  • 在 NFC 标签扫描期间,onNewIntent() 内的intent.getAction() 为 null

    这是我第一次使用 NFC 标签 我在清单中声明了 NFC 扫描活动
  • 使用 OkHttp 下载损坏的文件

    我编写的下载文件的方法总是会产生损坏的文件 public static String okDownloadToFileSync final String link final String fileName final boolean te
  • 如何清除Android剪贴板?

    我发现的方法都不起作用 这是我尝试过的 1 使用clearPrimaryClip 的方法ClipboardManager class ClipboardManager clipboard ClipboardManager getSystem
  • 什么是 Android 测试协调器?

    谷歌最近发布了Android测试支持库1 0 读完后overview https android developers googleblog com 2017 07 android testing support library 10 is
  • 在光标所在行强制关闭!

    嘿 我正在尝试创建一个应用程序来查找存储在 SQlite 数据库中的 GPS 数据 但我面临一个问题 我构建了一个 DbAdapter 类来创建数据库 现在我尝试使用以下函数从另一个类获取所有数据上的光标 public Cursor fet
  • 双屏 Android Studio 中不显示自动补全

    我刚刚从 Eclipse 切换到 Android Studio IntelliJ 我不明白自动补全是如何工作的 我尝试了 Control Space Control Shift Space 但没有相关建议 不在 Java 文件中 也不在布局
  • Android Google Map V2:如何在单击另一个标记时更改先前单击的标记的图标

    更新 我通过添加 previousMarker 对象解决了性能问题 因此 只有先前单击的标记将被删除并替换为默认图标 但是 当我单击标记时 信息窗口仍然不显示 我有一个地图视图并在上面设置了一些标记 我想要的是 当我单击一个标记时 它将其图
  • 使用 Proguard 通过 Dropbox.com 库混淆 Android 应用程序

    我刚刚创建了一个需要 Dropbox com API 库的 Android 应用程序 我现在尝试在 发布 模式下构建应用程序 并希望在代码上运行混淆器以对其进行混淆 但是 每当我尝试运行 Proguard 时 都会收到以下错误 Progua
  • Expresso 的 Android 测试首选项片段

    我在通过 Expresso 测试我的代码时遇到问题 我写了这段代码 public class SettingsActivity extends Activity Override protected void onCreate Bundle
  • Android计算两个日期之间的天数

    我编写了以下代码来查找两个日期之间的天数 startDateValue new Date startDate endDateValue new Date endDate long diff endDateValue getTime star
  • 动态更改按钮上的图像视图

    在我的应用程序中 我有按钮和ImageView 当我按下按钮时我想改变ImageView 我的可绘制文件夹中有 5 张图像 按下按钮时 ImageView 根据按钮单击一张一张地更改图像 我想要它的解决方案 感谢任何可以提供帮助的人 维护一
  • 在数组列表中过滤 Filterable 不取消之前的过滤

    我看过过滤器方法文档 其中显示调用过滤器会取消所有先前未执行的过滤请求 并发布一个稍后将执行的新过滤请求 但我收到的实际回调有些不同 在我的实现中 它不会取消先前的过滤器请求并调用publishResults 最近一次搜索条件后的上一次搜索

随机推荐

  • C++ 重载运算符 << for std::string

    我现在刚刚看到另一个简单的 C 代码使用 sprintf 将 C 内置函数附加到字符数组中 我想足够了 我可以帮助提供简单 轻量级 附加和非格式化功能std string 但由于它将被签入团队的通用代码中 我希望它是完美的 所以我需要一些建
  • 如果订单具有此特定类别,请更改 Woocommerce 电子邮件主题

    我只是想知道如果订单具有特定类别 例如 预购 是否可以更改电子邮件主题 我想将 PO 放在开头 PO 新客户订单 0000 然后客户的所有其他订单都会收到默认电子邮件主题 新客户订单 0000 add filter woocommerce
  • 地理编码 API 的准确度如何?什么是最准确的?

    我正在使用具有地理编码功能的谷歌地图 API 创建一个应用程序 显然 我想使用最准确的api 我给应用程序一个地址 我需要在地图上找到它 但我只要找到纬度和经度就可以了 然后我可以使用它将其合并到我选择的任何地图 api 中 根据您的经验
  • Scala 中的“Prolog 风格”:与过程代码混合?

    继续Scala 中的 prolog 风格 是什么 https stackoverflow com questions 73611934 what is prolog style in scala 我想在 Scala 3 中结合逻辑推理和过程
  • 如何刷新 Kendo UI 网格

    我正在尝试刷新 Kendo UI 网格 但尚未成功 有人可以告诉我我错过了什么或我做错了什么吗 我有以下代码 cshtml btnRefresh click function e ajax type POST url Url Content
  • iOS消费API设计

    我将为 Web 应用程序开发一个 iOS 应用程序 网络应用程序使用代码点火器 我将创建一个 iOS 应用程序将使用的 API 服务 我正在考虑创建一个 api 版本 这样当 web api 发生变化时 iOS 应用程序就会知道 担忧 当
  • 从输入字段读取属性时 HTML 编码丢失

    我使用 JavaScript 从隐藏字段中提取一个值并将其显示在文本框中 隐藏字段中的值被编码 例如
  • 从谷歌驱动器中永久删除文件

    如何使用谷歌脚本永久删除谷歌驱动器上的文件 我发现只有方法setTrashed 它将文件移至垃圾箱 但如何永久删除文件 Apps 脚本能够访问 Google API 但您需要在使用它们之前显式启用它们 Drive API 可用于删除文件 驱
  • 窗口标题文字大小

    HI 我想知道我应该在 xml 中使用什么样的属性来设置窗口标题文本大小 以下代码将有助于增加窗口标题栏的大小及其文本大小 希望这会有所帮助
  • 所有行值在一列中

    我想在一列中显示所有值 我可以怎样做呢 数据如下 user id degree fi degree en degree sv 3601464 3700 1600 2200 1020 100 0 0 3600520 100 1300 1400
  • Google_Activity 必须是 Google_ActivityObject 的实例

    我不知道这有什么错误 我可能认为谷歌 PHP 客户端库中也有人可以帮助解决这个问题 这是我的代码 this gt client gt refreshToken con 0 gt secret newtoken this gt client
  • 从外部 qss 文件读取 pyqt 样式表

    我已经制作了 pyqt stylsheet 的 qss 文件 我应该如何调用文件内容并提供给self setStylesheet from PyQt4 import QtCore s QtCore QString c myProject d
  • 激活和停用 UISearchController 时 UITableView 在位置之间跳转

    我最近在表视图中添加了 UISearchController 但遇到了动画问题 当搜索栏被点击并变为活动状态时 表格视图会向上跳跃以满足搜索控制器的新 活动 位置 这样做的问题是 搜索控制器动画到这个新位置 但表视图却没有 所以它非常不和谐
  • Android按钮栏-buttonBarButtonStyle在按钮之间留有间隙

    我在使用内置 Android 按钮栏样式时遇到一些问题 为每个按钮指定宽度 0 和权重 1 后 两个按钮之间仍然存在大约 1px 的间隙 参见图片 消除这种差距的最佳方法是什么 为什么它一开始就在那里
  • 使用按位运算符从 32 位整数检索字节

    这是问题和我目前遇到的问题 我只是不明白这是怎么错的 getByte 从字 x 中提取字节 n 字节编号从 0 LSB 到 3 MSB 示例 getByte 0x12345678 1 0x56 合法操作 gt 最大操作数 6 评级 2 in
  • ViewModel 最佳实践

    From 这个问题 https stackoverflow com questions 526641 what to put in your viewmodel 看起来让控制器创建一个是有意义的视图模型这更准确地反映了视图试图显示的模型 但
  • 按值搜索数组中的哈希值

    我有一个函数可以将 Excel 数据提取到哈希数组中 如下所示 sub set exceldata my excel file or Excel ORDERS csv if e excel file or open EXCEL OR exc
  • 如何从 Solr 查询中获取 tf 和 idf 分数?

    以下 Solr 文档 https cwiki apache org confluence display solr Function Queries https cwiki apache org confluence display sol
  • 使用 AzureReader2 调整图像大小会导致 404

    当我尝试使用 AzureReader2 调整图像大小时 收到 404 错误 但是 在使用存储模拟器进行开发时不会发生这种情况 仅在部署到 Azure 时才会发生 当没有调整大小时也不会发生这种情况 So http myapp azurewe
  • 如何使用 SQLiteOpenHelper 与 sd 卡上的数据库?

    根据这里和网络扩展应用程序中的各种答案及其继承的方法 getDatabasePath 将允许设置从标准内部存储器位置到插入的更大尺寸的 SD 卡的数据库存储路径 这对我不起作用 建议的构造仍然使用内存上的数据库 事实上 SQLiteOpen