Android 无法复制数据库
Android can't make copy of database
我正在尝试设置一个将删除时钟中所有闹钟的 Tasker 任务。我在我的旧 phone 上进行了设置并且运行良好。我所做的是在没有警报时复制警报数据库。当我想删除当前设置的警报时,Tasker 运行 shell 命令删除当前数据库中的警报。然后 Tasker 运行 shell 命令来复制空数据库并重命名它。然后是一些更改权限和所有者的命令。
当我试图将其全部转移到我的新 phone 时,我 运行 遇到了一些麻烦。新的 phone 是物有所值的 One Plus 3。所以我复制了所有东西,唯一看起来需要更改的是 shell 命令的包名称。我改变了它并尝试了 Tasker 任务。没有运气。时钟应用程序冻结了。我从备份中恢复了所有内容。我决定做一些测试,看看问题出在哪里。
我使用 Root Explorer 应用程序复制了警报数据库。当我试图打开复制的数据库时,我收到以下错误消息:
An error occurred while opening the database. Attempt to invoke
virtual method '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)' on a null
object reference
我仍然可以正常打开原始数据库。但是当我复制它时,似乎发生了一些事情。任何见解都会有很大帮助。谢谢
我理解的问题:
你说"When I copy a database I get an error",如果是在copy过程中那么就无足轻重了,如果你不是那个意思,那就这么说。继续...
你已经从某个地方复制了一个 sqlite 数据库到某个地方(你没有说在哪里,这可能很重要),并且你没有打开它的权限[也许你打开了,然后这样说,授予所有权限](但你可以打开原件)。想到文件权限(文件的用户权限)。
此方法适用于旧的 phone 但现在不适用于新的(API 版本会很有用,这些方法已经改变了很多)。
该错误与游标查询有关。
see my answer about Cursor's, and cursor management
不要认为你的原始代码是完美的,因为它可以工作。需要更多细节。
Post 错误中涉及一些最少的代码。我们不是要窃取您的代码,我们无法回答您的问题,如果没有看到使其崩溃的代码,我们该怎么做?。还包括目录。你永远不知道,我们可能会给你有效的代码 ;O)
我正在尝试设置一个将删除时钟中所有闹钟的 Tasker 任务。我在我的旧 phone 上进行了设置并且运行良好。我所做的是在没有警报时复制警报数据库。当我想删除当前设置的警报时,Tasker 运行 shell 命令删除当前数据库中的警报。然后 Tasker 运行 shell 命令来复制空数据库并重命名它。然后是一些更改权限和所有者的命令。
当我试图将其全部转移到我的新 phone 时,我 运行 遇到了一些麻烦。新的 phone 是物有所值的 One Plus 3。所以我复制了所有东西,唯一看起来需要更改的是 shell 命令的包名称。我改变了它并尝试了 Tasker 任务。没有运气。时钟应用程序冻结了。我从备份中恢复了所有内容。我决定做一些测试,看看问题出在哪里。
我使用 Root Explorer 应用程序复制了警报数据库。当我试图打开复制的数据库时,我收到以下错误消息:
An error occurred while opening the database. Attempt to invoke virtual method '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)' on a null object reference
我仍然可以正常打开原始数据库。但是当我复制它时,似乎发生了一些事情。任何见解都会有很大帮助。谢谢
我理解的问题:
你说"When I copy a database I get an error",如果是在copy过程中那么就无足轻重了,如果你不是那个意思,那就这么说。继续...
你已经从某个地方复制了一个 sqlite 数据库到某个地方(你没有说在哪里,这可能很重要),并且你没有打开它的权限[也许你打开了,然后这样说,授予所有权限](但你可以打开原件)。想到文件权限(文件的用户权限)。
此方法适用于旧的 phone 但现在不适用于新的(API 版本会很有用,这些方法已经改变了很多)。
该错误与游标查询有关。
see my answer about Cursor's, and cursor management
不要认为你的原始代码是完美的,因为它可以工作。需要更多细节。
Post 错误中涉及一些最少的代码。我们不是要窃取您的代码,我们无法回答您的问题,如果没有看到使其崩溃的代码,我们该怎么做?。还包括目录。你永远不知道,我们可能会给你有效的代码 ;O)