2010-08-06 90 views
1
SQLiteDatabase database = SQLiteDatabase.openDatabase("/data/data/com.android.browser/databases/browser.db", 
null, 0); 
database.setLockingEnabled(true); 

database.delete("bookmarks", "_id=2", null); 
database.close(); 

从LOCAT结果误差Android的sqlite异常,如何解决?

08-06 05:53:45.769: ERROR/tt(958): android.database.sqlite.SQLiteException: error code 14: unable to open database file 
08-06 05:53:45.769: ERROR/tt(958):  at android.database.sqlite.SQLiteStatement.native_execute(Native Method) 
08-06 05:53:45.769: ERROR/tt(958):  at android.database.sqlite.SQLiteStatement.execute(SQLiteStatement.java:66) 
08-06 05:53:45.769: ERROR/tt(958):  at android.database.sqlite.SQLiteDatabase.delete(SQLiteDatabase.java:1362) 
08-06 05:53:45.769: ERROR/tt(958):  at com.iwidsets.sqlite.manager.SQLiteManager.onCreate(SQLiteManager.java:48) 
08-06 05:53:45.769: ERROR/tt(958):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123) 
08-06 05:53:45.769: ERROR/tt(958):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2231) 
08-06 05:53:45.769: ERROR/tt(958):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2284) 
08-06 05:53:45.769: ERROR/tt(958):  at android.app.ActivityThread.access$1800(ActivityThread.java:112) 
08-06 05:53:45.769: ERROR/tt(958):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1692) 
08-06 05:53:45.769: ERROR/tt(958):  at android.os.Handler.dispatchMessage(Handler.java:99) 
08-06 05:53:45.769: ERROR/tt(958):  at android.os.Looper.loop(Looper.java:123) 
08-06 05:53:45.769: ERROR/tt(958):  at android.app.ActivityThread.main(ActivityThread.java:3948) 
08-06 05:53:45.769: ERROR/tt(958):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-06 05:53:45.769: ERROR/tt(958):  at java.lang.reflect.Method.invoke(Method.java:521) 
08-06 05:53:45.769: ERROR/tt(958):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782) 
08-06 05:53:45.769: ERROR/tt(958):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540) 
08-06 05:53:45.769: ERROR/tt(958):  at dalvik.system.NativeStart.main(Native Method) 
+1

当你把数据库锁定,我想你试图从2个不同的线程访问它? – Sephy 2010-08-06 09:49:36

+0

thx sephy,我修改了这个bug – fonter 2010-08-27 00:52:57

回答

1

这似乎是问题的所在:

SQLiteDatabase database = SQLiteDatabase.openDatabase("/data/data/com.android.browser/databases/browser.db", null, 0);

所以这让我思考的文件权限,当我开始为马上试图调试我的实际手机上的东西,我注意到/数据文件夹无法在文件浏览器中访问,结果是手机没有植入,这是正常的。让我们更进一步,我认为程序也可能无法访问/ data文件夹中的任何内容,除了一个用于它自己的目录的目录。所以如果你的软件包没有被命名为“com.android.browser”,它很可能无法读取该文件夹,因此试图打开文件会失败。也不完全确定这是否适用于此,但我也遇到了使用绝对路径时会失败的情况,但是当您使用相对路径到达同一位置时会发生这种情况。所以为此我会说使用

SQLiteDatabase database = SQLiteDatabase.openDatabase("browser.db", null, 0);

,所以如果你的包被命名为com.android.browser我的建议应该在同一地点花掉它。如果不是,那很可能它没有权限访问其他应用程序的文件。我认为获得许可是可能的,但是你必须做一些事情来让他们共享文件。我确实在某处读过android通常在一个单独的空间中运行每个应用程序,它说它为每个应用程序使用单独的Linux帐户,这就是android os所建立的。

因此,如果您试图编辑内置浏览器中的书签,我不认为您可以直接修改它的数据库,因为您无法修改该程序以告诉它与您的程序共享它的文件;但是你可能会发送意图到应用程序并让它以这种方式执行。

相关问题