Android 在 AsyncTask kotlin 中从 doInBackGround() 获取结果

Android get result from doInBackGround() in AsyncTask kotlin

我正在制作一个函数来计算来自 android 设备的以“.mp3”结尾的文件,并且在从 AsyncTask 获取结果时遇到了麻烦。我怎么才能得到它? 这是我的 AsyncTask class

class CountAsyncTask: AsyncTask<String, Int, Int>() {

    private val root = Environment.getExternalStorageDirectory().path + "/Zing MP3"

    override fun doInBackground(vararg params: String?): Int {
        val a: ArrayList<File> = ArrayList()
        val files = File(root).listFiles()!!
        for (i in files.indices) {
            if (files[i].name.endsWith(".mp3"))
                a.add(files[i])
        }
        Log.e("Counting", a.size)
        return a.size
    }

    override fun onPostExecute(result: Int?) {
        super.onPostExecute(result)
    }

    override fun onProgressUpdate(vararg values: Int?) {
        super.onProgressUpdate(*values)
    }
}

这里是我在 activity

中的代码
fun countSongsOnDevice() {
        if (!checkPermissionForReadExtertalStorage()) {
            requestPermissionForReadExtertalStorage()
        } else {
            CountAsyncTask().execute()
            //totalSongsOnDevice = ....
        }
    }

谢谢

您应该对“onPostExecute”方法中的结果做任何您想做的事情。此方法在 UI 线程上执行,因此您可以引用 UI 元素或您想要调用后台任务结果的任何逻辑。

最好的方法是从 onPostExecute 方法调用您的主要 activity 的某些方法,该方法使用结果显示给用户或您想要的任何内容