【问题标题】:Android get result from doInBackGround() in AsyncTask kotlinAndroid 从 AsyncTask kotlin 中的 doInBackGround() 获取结果
【发布时间】:2021-09-21 07:09:45
【问题描述】:

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

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)
    }
}

这是我的活动代码

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

谢谢

【问题讨论】:

  • 你忘了提到代码的问题。你有没有得到任何错误或异常? AsyncTask 也已弃用,您可能想切换到备用 API。
  • 请提及您遇到的错误。
  • 我在调试时得到了大小,但我不知道如何将结果传递给活动。
  • AsyncTask 已弃用。现在可能是您开始转向协程的好时机。

标签: android kotlin android-asynctask


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    相关资源
    最近更新 更多