android 使用jetpack compose在应用程序屏幕上读取并显示文件中的数据

irlmq6kh  于 2023-02-27  发布在  Android
关注(0)|答案(1)|浏览(259)

我正在android studio中使用jetpack compose和Kotlin来构建一个应用程序。这个应用程序可以显示某些歌曲,比如标题和作者。我想到了使用JSON文件来写入我所有的数据,这样应用程序就可以读取数据并将其显示在应用程序的“音乐屏幕”上。这是我的项目的样子:

为了实现这个目标,我做了一些测试。首先,通过在MainActivity文件中使用applicationContext.assets.open("musics.json")

data class MyData(
    val title: String,
    val author: String,
)

class MainActivity : ComponentActivity() {
    // Routing object
    // lateinit var navController: NavHostController

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
          
                //navController = rememberNavController()

                val jsonString = applicationContext.assets
                    .open("musics.json")
                    .bufferedReader()
                    .use { it.readText() }

            val dataArray = JSONArray(jsonString)
            val dataList = mutableListOf<MyData>()

            for (i in 0 until dataArray.length()) {
                val item = dataArray.getJSONObject(i)
                val title = item.getString("title")
                val author = item.getString("author")
                dataList.add(MyData(title, author))
            }

            LazyColumn {
                items(dataList.size) {
                    Row {
                            Text(dataList[it].title)
                            Text(dataList[it].author)
                        }
                }
            }

            // entry point of my navigation graph
            // SetupNavGraph(navController = navController)

        }
    }
}

这个方法非常好用,但是我想在MusicsScreen上显示数据。不幸的是,我之前使用的applicationContext对象只能在MainActivity类中使用。所以我不得不使用其他方法。
我尝试File.io了MusicsScreen文件中的www.example.com库,但它无法正常工作,并导致错误。有人知道如何使其工作吗?
PS:我是一个移动的开发的初学者,我不太了解JetPackCompose框架,所以如果你认为我应该在学习中加深一些东西,不要犹豫,让我知道。

qpgpyjmq

qpgpyjmq1#

好吧,让我分享一个好方法来读取和显示数据从一个文件希望它能帮助你,检查下面的代码
首先创建MusicUtils文件并将以下代码粘贴到该文件中

fun getJsonDataFromAsset(
    context: Context,
    fileName: String
): String? {
    val jsonString: String
    try {
        jsonString = context.assets.open(fileName).bufferedReader().use {
            it.readText()
        }
    } catch (exp: IOException) {
        exp.printStackTrace()
        return null
    }

    return jsonString
}

fun musicList(context: Context): MutableList<MyData> {
    val jsonFileString = getJsonDataFromAsset(context = context, "musics.json")
    val type = object : TypeToken<List<MyData>>() {}.type
    return Gson().fromJson(jsonFileString, type)
}

data class MyData(
    val title: String,
    val author: String,
)

现在musicList函数包含了音乐数据的列表,你可以在任何地方调用这个函数。希望它能起作用👍🏻

相关问题