每当尝试在 Android 应用程序中读取保存到内部存储中的文件时,应用程序就会崩溃

问题描述 投票:0回答:1

我正在尝试创建一个简单的 Android 应用程序,其中文本字段中的值被保存到文件中,然后在按下按钮时以可组合文本的形式显示在屏幕上,但是每当我尝试读取文件时,应用程序就会崩溃。

我创建了一个名为“noteDirectory”的目录。它保存一个名为“note”的文件。这是代码

`// Directory That Holds Notes
val noteDirectory = File(applicationContext.filesDir, "notes")
noteDirectory.mkdir()
        
// File That Holds Note
val note = File(noteDirectory, "note.txt")`

这是应用程序的业务逻辑。有一个字符串值保存名为“createNoteTextValue”的文本字段的值。还有另一个字符串值,用于保存显示已保存文件的文本可组合项的值。最后有一个名为“saveValue”的函数,它将“createNoteTextValue”中的值保存到“note”文件中。

`// Value For TextField That Is Saved Into File
var createNoteTextValue by remember { mutableStateOf("") }

// Value For Text That Displays Saved Note
var displayNoteTextValue by remember { mutableStateOf("") }

// Function That Saves Note
fun saveValue() {
    applicationContext.openFileOutput("note.txt", Context.MODE_PRIVATE).use {
      it.write(createNoteTextValue.toByteArray())
    }
}`

这是用户界面。有一个列占据了整个屏幕。该列的内部是一个文本字段、两个按钮和一个文本可组合项。文本字段保存将存储到文件中的值。第一个按钮调用“saveValue”函数。第二个按钮应该将保存的文件显示到可组合文本中,但事实并非如此。

`// Application Layout
Column(
  horizontalAlignment = Alignment.CenterHorizontally,
  verticalArrangement = Arrangement.Center,
  modifier = Modifier
     .fillMaxSize()
) {

   // TextField That Holds Note
   TextField(value = createNoteTextValue, onValueChange = {createNoteTextValue = it})

   // Button That Saves Note
   Button(onClick = { saveValue() }) {
     Text(text = "Save")
   }

   // Button That Displays Saved Note
   Button(onClick = { displayNoteTextValue = note.readText() }) {
      Text(text = "Show")
    }

    // Text That Displays Saved Note
    Text(text = displayNoteTextValue)
 }`
        

这一切都放在主要活动中。

当我尝试读取“note”文件的值时,应用程序崩溃了。我已经指出了问题但是 我不知道如何解决它。和目录有关系。每当我删除目录并将“applicationContext.fileDir”放入“note”文件中的父参数中时,它就会起作用。

file directory crash android-jetpack-compose storage
1个回答
0
投票

您还需要在文件系统中创建文件,然后才能向其写入内容:

val note = File(noteDirectory, "note.txt")
note.createNewFile()
© www.soinside.com 2019 - 2024. All rights reserved.