问题标签 [android-database]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
22056 浏览

java - IllegalArgumentException:未知的 URL 内容:// CONTENT

IllegalArgumentException:未知的 URL 内容://

^ 对上述内容做了噩梦。我检查了我的变量和路径,但看不出问题出在哪里?非常感谢任何指点!

这是我的踪迹。

内容提供商

数据库助手类

显现

0 投票
1 回答
2965 浏览

android - 带有 selection 和 selectionArgs[] 的 Android CursorLoader

我正在使用LoaderforRecyclerView.Adapter列出项目。我想列出数据库表中的特定项目。所以我做了:

通常我给null,nullselectionselectionArgs在这里,我列出了带有特定的项目IDs。当新项目添加到表中并且我想列出它时会出现问题。cursor我返回的人不知道新项目,因为我给了 3 个特定项目,所以它只是检测这 3 个项目何时发生变化。

当添加了一些新项目ID并且我也想列出它时如何列出?我应该将所有项目从数据库投影到并RecyclerView.Adapter过滤吗?IDsonBindViewHolder()

0 投票
3 回答
131 浏览

android - 在一个片段中将对象添加到数据库并在另一个片段中更新 listView

我有一个包含 3 个片段的活动,当我在 fragCurrencyExchange 中将对象添加到数据库时,我需要从数据库更新 fragExchangeHistory listView。我怎么能做到?

代码:GitHub

0 投票
6 回答
6325 浏览

android - 在商店发布新版本的 android 应用程序时更新 SQLite 数据库

我在我的 android 应用程序中使用 sqlite,我的数据库文件称为 data.db。假设我有两个表,其中一个是静态值(只读),第二个是保存动态值并将应用程序推送到 playStore。

在下一个版本中,我更新了 data.db 并更新了第一个表中的值,在第二个表中添加了新列,并添加了第三个新表并将应用程序推送到 PlayStore。那么我如何检查用户是否正在更新应用程序以及保存现有数据的最佳方法是什么,以及当它是更新而不是全新安装时如何以编程方式更新 data.db?

0 投票
1 回答
64 浏览

android - 在新应用程序中访问现有数据库

我已经创建了需要创建数据库并存储数据的 android 应用程序(app 1)。现在我创建了另一个 android 应用程序(app 2),它需要访问之前创建的数据库(在 app1 中)。如何从应用程序 2 访问应用程序 1 中的数据库

0 投票
1 回答
1816 浏览

database - E/SQLiteLog:(1)表Users_Table没有名为Monday_Calories的列

我正在做一个存储用户数据的数据库,用户输入用户名密码年龄性别身高电子邮件和体重,其他列的值保留为 0.0。当我调试应用程序时,我收到以下错误 E/SQLiteLog:(1)表用户表没有名为 Monday_Calories 的列错误来自用户表,尚未调用产品表。

0 投票
2 回答
691 浏览

android - Android:如何为特定版本制作迁移脚本

我的应用程序当前发布versionCode的是15,并且我想运行一些迁移代码来修复应用程序数据库上的用户数据(而不是模式结构)。

那么,对于从小于或等于 15的任何版本升级到任何高于或等于 16的版本的人,如何只运行一次修复代码?

0 投票
1 回答
211 浏览

android - 我无法打开数据库并对其进行查询

强文本

我无法打开数据库并对其进行查询。我想访问使用意图值从不同的 java 文件传递​​的表行。请帮忙 !

日志猫

performCreate(Activity.java:5117) 04-04 11:52:12.400: E/AndroidRuntime(26824): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081) 04-04 11:52:12.400: E/ AndroidRuntime(26824): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2150) 04-04 11:52:12.400: E/AndroidRuntime(26824): ... 11 更多 04-04 11:52:14.922: I/Process(26824):发送信号。PID:26824 SIG:9

0 投票
3 回答
9836 浏览

android - 何时将数据保存到数据库,onPause() 或 onStop()?

我知道这个问题已经被问过一百万次了,尽管我自己已经知道答案,而且正确的答案是唯一有保证的调用是 onPause(),所以你应该把你的数据保存在那里。

然而,在许多 android 文档的地方,他们总是建议不要在 onPause() 方法中做繁重的工作(例如在数据库中写入数据),因为它会延迟活动之间的转换。

根据表 1 中的 Android 开发人员指南

onPause():此方法通常用于提交对持久数据的未保存更改、停止动画和其他可能消耗 CPU 的事情等。它应该很快地做任何事情,因为下一个活动在它返回之前不会恢复。

可杀:是

然后根据类似表格中的 Android Developer Reference Guide 进行操作。

它说的是同样的事情,但是:

可杀:预蜂巢

他们添加了一个小注释,上面写着:

请注意,这些语义将在针对以 HONEYCOMB 开头的平台的应用程序与针对先前平台的应用程序之间略有不同。从 Honeycomb 开始,应用程序在其 onStop() 返回之前不会处于可终止状态。这会影响何时可以调用 onSaveInstanceState(Bundle)(它可以在 onPause() 之后安全地调用,并允许应用程序安全地等到 onStop() 以保存持久状态。


可杀

请注意上表中的“Killable”列——对于那些被标记为可终止的方法,该方法返回后,托管该活动的进程可能随时被系统终止,而无需执行另一行代码。

FOR POST-HONEYCOMB(我不关心早期版本): 那么,可以假设任何 Android 设备(包括不同的 ROMS)都会确保在活动中调用 onStop 吗?这是进行任何耗时的应用程序存储写入的最佳场所吗?

注意:这非常令人困惑,因为这里的大多数答案、网站、书籍甚至在线 android 测试都将其作为正确答案,您应该将其保存在 onPause 而不是 onStop 中。

0 投票
0 回答
168 浏览

android - SQLiteDatabase 和 Cursor 泄漏和 close() 调用

我需要一些关于数据库和游标管理的帮助。我注意到,当进入/离开某些片段时,我得到:

W/SQLiteConnectionPool:数据库“+data+data+database”的 SQLiteConnection 对象被泄露!请修复您的应用程序以正确结束正在进行的事务并在不再需要时关闭数据库。

这让我从头开始检查我在做什么以及什么时候做的。我有:

  • 一个DatabaseHelper扩展类SQLiteOpenHelper,只有一些用于创建和更新数据库的方法;
  • 一个DatabaseManager类,什么都不扩展。除其他外,我使用它来保持对对象的单个引用DatabaseHelper

    /li>
  • 在这个类中,一些方法查询数据库并返回一个Cursor对象;

  • 在这个类中,一个closeConnection()我不太确定的方法。

我从片段中使用这个类,每次调用new DatabaseManager(getActivity())。这不应该创建一个新的帮助引用。现在我是:

  • Cursor.close()一旦我从查询中得到我想要的信息就打电话;
  • 从来没有在我的 SQLiteDatabase 上调用open()我的助手,尽管我在某个地方读到了应该做的事情。具体什么时候?为什么即使不调用它也能正常工作?
  • 调用使用我的数据库的片段manager.closeConnection()的方法。onStop()如您所见,它调用 close h(对帮助程序类的引用)和可读SQLiteDatabase对象。但是,我对此不太确定,因为它关闭了辅助引用h而不使其为空,所以将来调用new DatabaseManager()? 也许用单例模式处理数据库不需要你打电话h.close()

除此之外,不用说(这就是我要问的原因),在切换片段时,我会收到上述警告。怎么了?我应该怎么办?是什么end transactions in progress意思?我应该修改我的closeConnection()方法,在不同的生命周期时间调用它,还是根本不调用它?


在@Selvin 指出令人尴尬的问题后,我将其设为h静态。现在,如果我删除对 的任何调用closeConnection(),一切正常,我不会收到任何警告。这意味着我从不打电话给h.close()db.close()。那样行吗?如果没有,我应该什么时候打电话?