【问题标题】:Android can't make copy of databaseAndroid无法复制数据库
【发布时间】:2016-08-30 01:52:27
【问题描述】:

我正在尝试设置一个 Tasker 任务,该任务将删除时钟中的所有闹钟。我在我的旧手机上进行了设置并且工作得很好。我所做的是在没有警报时复制警报数据库。当我想删除当前设置的警报时,Tasker 会运行一个 shell 命令来删除当前包含警报的数据库。然后 Tasker 运行一个 shell 命令来复制空数据库并重命名它。然后是一些更改权限和所有者的命令。

当我试图将这一切转移到我的新手机上时,我遇到了一些麻烦。这款新手机是物有所值的一加 3。所以我把所有的东西都复制了一遍,唯一看起来需要改变的是shell命令的包名。我改变了它并尝试了Tasker任务。没运气。时钟应用程序冻结了。我从备份中恢复了所有内容。我决定做一些测试,看看问题出在哪里。

我使用 Root Explorer 应用程序复制警报数据库。当我试图打开复制的数据库时,我收到以下错误消息:

打开数据库时出错。尝试调用 虚拟方法'android.database.Cursor android.database.sqlite.SQLiteDatabase.query(java.lang.String, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String)' 为空 对象引用

我仍然可以正常打开原始数据库。但是当我复制它时,似乎正在发生一些事情。任何见解都会有很大帮助。谢谢

【问题讨论】:

  • 张贴您的代码先生
  • 无代码。我只是使用应用程序 Root Explorer 来复制数据库。
  • 您是在复制自己的应用数据库吗?或其他数据库到您的应用程序?
  • 这与编程无关。你只是在使用你的安卓设备时遇到了麻烦。当然,我们不能投票关闭有悬赏的问题。
  • 您完全进入了错误的网站来提问。您不是在 Tasker 中编写程序(尽管看起来可能是这样,但我保证您不是)。这就是大家一直在说的。您的问题完全与最终用户功能有关,而不是应用程序的开发。为了获得更好的结果和更少的攻击,您可以使用“Android Enthusiasts”堆栈交换。

标签: java android sqlite tasker


【解决方案1】:

我理解的问题:
你说“当我复制一个数据库时我得到一个错误”,如果它在复制过程中那么它是微不足道的,如果你不是那个意思,那就这么说。继续... 您已将 sqlite 数据库从某个地方复制到某个地方(您不说在哪里,这可能很重要),并且您无权打开它[也许您这样做,然后这么说,授予所有权限](但是您可以打开原件)。想到文件权限(文件的用户权限)。 此方法适用于旧手机,但现在不适用于新手机(API 版本会很有用,这些方法已经改变了很多)。 该错误与光标查询有关。 see my answer about Cursor's, and cursor management 不要假设您的原始代码是完美的,因为它有效。需要更多细节。 发布一些涉及错误的最小代码。我们不是要窃取您的代码,我们无法回答您的问题,而不会看到导致其崩溃的代码,我们该怎么做?还包括目录。你永远不知道,我们可能会为你提供有效的代码;O)

【讨论】:

  • 感谢您的合法回复。很明显,这不是解决我的问题的合适论坛。我想我会在这一点上继续前进。但我非常感谢您付出的努力。谢谢!
猜你喜欢
  • 2020-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-18
相关资源
最近更新 更多