android 尝试为我的应用程序找到正确的文件路径,但“上下文”似乎不存在

zwghvu4y  于 2022-12-16  发布在  Android
关注(0)|答案(2)|浏览(144)

我尝试将数据从应用导出到文本文件中,要做到这一点,我知道我需要找到到应用特定文件存储点的适当路径。我发现我应该使用类似context.getExternalFilesDir()的东西。虽然这看起来很简单,但当我尝试使用val path = context.getExternalFilesDir()时,Android Studio告诉我,context是一个函数,无法使用提供的参数调用。其他人似乎没有这个问题,是我缺少了一个导入还是类似的问题?
由于我遇到了context.getExternalFilesDir()这一行,它被用来返回文件应该存放的路径,我以为它会正常工作,但没有这样的运气。我已经深入研究了很长时间,但似乎不知道在IDE不想识别它的情况下该怎么做。
以下是我的进口,以防我遗漏了什么:

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.*
import androidx.compose.runtime.*
import androidx.compose.runtime.snapshots.SnapshotStateMap
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.shadow
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.compose.ui.unit.times
import com.example.packandfind.ui.theme.PackAndFindTheme
import java.io.File

下面是包含尝试调用的函数:

fun importData(): SnapshotStateMap<String, List<String>> {
    val fileName = "data.txt"
//    val path = context.getExternalFilesDir()
    val file = File(fileName)
    var data = mutableStateMapOf<String, List<String>>()

    if (file.exists())
    {

        file.forEachLine {
            val (key, value) = it.split("=")
//                var newValue = value.replace("[", "")
//                newValue = newValue.replace("]", "")
//                newValue = newValue.replace(" ", "")
            val listValue = value.split(",")

            data[key] = listValue
        }
    } else {
        data = mutableStateMapOf("New box" to listOf("location"))
    }

    return data
}
bis0qfac

bis0qfac1#

您似乎正在尝试使用编写UI。在这种情况下,@Composable函数可以使用LocalContext.current获取有效的Context

@Composable
fun FruitText(fruitSize: Int) {
    // Get `resources` from the current value of LocalContext
    val resources = LocalContext.current.resources
    val fruitText = remember(resources, fruitSize) {
        resources.getQuantityString(R.plurals.fruit_title, fruitSize)
    }
    Text(text = fruitText)
}

(from the docs
由于您似乎不熟悉Context ...我强烈建议您:

  • 在开始编写UI之前,您通过一些书籍或课程学习了传统的Android应用程序开发(使用基于View的UI系统),或者
  • 您找到一些书籍或课程,教您使用合成UI开发Android应用程序
pexxcrt2

pexxcrt22#

我建议将上下文作为参数从调用的Activity传递,并使函数接受它。

fun importData(context: Context): SnapshotStateMap<String, List<String>> {
     ....
}

相关问题