Java 尝试将数据库复制到sd卡存储方向时获取未捕获处理程序异常
我试图将我的数据库文件复制到SD卡中。我正在使用这些代码来执行此操作:Java 尝试将数据库复制到sd卡存储方向时获取未捕获处理程序异常,java,android,Java,Android,我试图将我的数据库文件复制到SD卡中。我正在使用这些代码来执行此操作: private static String DB_PATH = Environment.getExternalStorageDirectory().toString()+"/"; private static final String DATABASE_NAME = "story.sql"; private void copyDataBase() throws IOException {
private static String DB_PATH = Environment.getExternalStorageDirectory().toString()+"/";
private static final String DATABASE_NAME = "story.sql";
private void copyDataBase() throws IOException {
InputStream myInput = helperContext.getAssets().open(DATABASE_NAME);
String outFileName = DB_PATH + DATABASE_NAME;
OutputStream myOutput = new FileOutputStream(outFileName);
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, length);
}
myOutput.flush();
myOutput.close();
myInput.close();
}
当我调试代码时,这里抛出异常
while ((length = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, length);
}
07-26 14:58:10.689: ERROR/AndroidRuntime(7723): Uncaught handler: thread main exiting due to uncaught exception
07-26 14:58:10.709: ERROR/AndroidRuntime(7723): java.lang.Error: Error copying database
07-26 14:58:10.709: ERROR/AndroidRuntime(7723): at org.android.story.SqliteManager$DatabaseHelper.createDataBase(SqliteManager.java:272)
07-26 14:58:10.709: ERROR/AndroidRuntime(7723): at org.android.story.SqliteManager.open(SqliteManager.java:62)
07-26 14:58:10.709: ERROR/AndroidRuntime(7723): at org.android.story.MainMenu.onCreate(MainMenu.java:21)
我在安卓操作系统2.1上试过,结果是一样的。在我试过安卓操作系统2.3.3版本后,它很有魅力。我还试过我的Android手机,它有1.6操作系统版本,数据库更小(我的数据库是9.8MB,改成了320KB大小),它工作得很好。那么,为什么这段代码适用于2.3.3或更小的数据库,而不适用于1.6或2.1呢?在1.6中是否有任何变通方法可供使用
编辑:我编写了这个调用copyDataBase()的函数
您是否具有SD卡的写入权限?错误发生在SQLiteManager类的第272行-您可以复制该代码吗?是的,我复制了。第272行的代码是:
抛出新错误(“复制数据库时出错”)代码>将该行替换为抛出新错误(例如getMessage())代码>以便我们可以阅读消息。再次发布错误日志。我如您所说进行了更改,消息详细信息返回null:07-26 16:37:08.799:error/AndroidRuntime(8360):java.lang.error
public void createDataBase() throws IOException {
boolean dbExist = checkDataBase();
if (dbExist) {
} else {
this.getReadableDatabase();
try {
copyDataBase();
} catch (IOException e) {
throw new Error("Error copying database");
}
}
}