使用Kotlin读取Android SQLite数据库时出错

使用Kotlin读取Android SQLite数据库时出错,android,kotlin,android-sqlite,android-jetpack,Android,Kotlin,Android Sqlite,Android Jetpack,运行以下代码时,我会收到错误消息: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.songapp/com.example.songapp.MainActivity}: java.io.FileNotFoundException: /data/data/com.example.songapp/databases/songs.db: open failed: ENOENT (No su

运行以下代码时,我会收到错误消息:

java.lang.RuntimeException: Unable to start activity
 ComponentInfo{com.example.songapp/com.example.songapp.MainActivity}: java.io.FileNotFoundException:
 /data/data/com.example.songapp/databases/songs.db: open failed: ENOENT (No such file or directory)
给出错误的代码如下:

@Throws(IOException::class)
fun copyDataBase(上下文:上下文,输出\数据库\路径:字符串,数据库\名称:字符串){
打印(“***在copyDataBase***”中)
//输出数据库路径(应用程序数据库路径)的路径。
var APP_DB_FILE_PATH=OUTPUT_DB_PATH+“/”+DB_NAME
//输入数据库文件的路径。
var INPUT\u DB\u PATH=“数据库/”+DB\u名称
//打开本地数据库作为输入流
//这是如何从资产目录获取路径
val databaseInput:InputStream=context.assets.open(输入\数据库\路径)
//打开空数据库作为输出流
val databaseOutput:OutputStream=FileOutputStream(应用程序\数据库\文件\路径)
//将字节从输入文件传输到输出文件
val缓冲区=字节数组(1024)
变量长度:Int
while(databaseInput.read(buffer.allow{length=it}>0){
databaseOutput.write(缓冲区,0,长度)
}
//关闭溪流
databaseOutput.flush()
databaseOutput.close()
databaseInput.close()
}
这在主要活动中被调用,如下所示:

var DB_PATH=“/data/data/com.example.songapp/databases/”
var DB_NAME=“songs.DB”
类MainActivity:AppCompatActivity(){
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
//获取上下文并将其提供给函数
//这就是发生错误的地方,通过禁用此选项,应用程序将成功运行。
copyDataBase(此,DB\U路径,DB\U名称)
设置内容{
第()列{
TopAppBar(title={Text(Text=“Nyimbo”)})
ScrollableColumn(修饰符.fillMaxWidth()
.填充(10.dp)){
lyricsPageComposable(lyricsMap=songMap)
}
}
}
}
}
我在assets目录
assets/database/songs.db
中有一个预填充的SQLite数据库,我希望它被复制到
/data/data/com.example.songapp/databases/songs.db
。我不知道如何检查复制是否成功。我错过了什么?我知道找不到数据库文件。这条路不对吗?是否数据库没有被复制?我怎么知道?我正在用一部Android手机来测试这个应用

运行下面的代码时,我会收到错误消息

很可能,
/data/data/com.example.songapp/databases/
尚未作为目录存在

这将在主活动中调用,如下所示

请不要硬编码路径。您可以通过获取数据库的标准位置

我不知道如何检查复制是否成功


如果您使用的是Android Studio,默认情况下停靠在右侧的设备文件资源管理器工具将允许您浏览设备的文件系统。

您是否声明了相关权限并向应用程序授予了这些权限<代码>和
@DavidKroukamp:代码没有写入外部存储器。@现在您说的是Commonware true。嗯,值得一试谢谢,从浏览器我可以看到数据库没有写。