昨晚我让这段代码在家工作,Whatzit 是一个很好的帮助。我让一切正常(注释掉了 dbFile 存在检查,并且只是将我想使用 sqlite 浏览器进行的任何更改复制到数据库中)。
今天早上我把我的平板电脑带到一台 Windows 7 机器上,卸载了应用程序并尝试从 eclipse 运行相同的代码。我不断收到错误消息:
03-12 11:51:39.320:E/AndroidRuntime(20365):原因:java.io.IOException:试图复制数据库 - 错误:/data/data/mypackage/databases/restaurant.db:打开失败:ENOTDIR (不是目录)
我已经在我的mac上压缩了我的项目并将其解压缩到windows机器上eclipse中的同一个项目目录中,并且在eclipse中刚刚执行了刷新。
想知道我可能会尝试什么吗?我尝试卸载该应用程序,将 .apk 复制回来并再次安装,但似乎没有任何效果。谢谢。
*我实际上是在实际设备上运行它 - 摩托罗拉 Xoom 4.0.3
private void copyDataBase(File dbFile) throws IOException {
try{
InputStream dbStream = myDbContext.getAssets().open(dbName);
Log.e("In copyDataBase", "Environment Directory: " + Environment.getDataDirectory().canRead());
Log.e("In copyDataBase", "Environment Directory: " + Environment.getDataDirectory().canWrite());
Log.e("In copyDataBase", "Environment Directory: " + Environment.getExternalStorageDirectory());
Log.e("In copyDataBase", "opened up file " + dbName + " successfully. - trying " + path.toString());
OutputStream newDbFile = new FileOutputStream(DB_PATH + dbName);
byte[] buffer = new byte[1024];
int length;
while((length = dbStream.read(buffer)) > 0){
newDbFile.write(buffer);
}
newDbFile.flush();
newDbFile.close();
dbStream.close();
}
catch(IOException e){
throw new IOException("trying to copy the database - ERROR: " + e.getMessage());
}
}
canWrite 和 canRead 的结果都返回为假。正如我在这里打字一样,这是完美无缺的。我不知道为什么将平板电脑连接到运行与 Eclipse 相同版本的 Windows 机器上会有什么不同。