首页 > 解决方案 > 如何将 API 中的数据分配给 Android 中的全局变量?

问题描述

var datasFromApi: ArrayList = arrayListOf()

btnNextCharacter.setOnClickListener(View.OnClickListener {

        if(checkForInternetConnection()) {

            try {
                val innerClassObject = DownloadingCharacterTask()
                innerClassObject.execute()

            }catch (e: Exception){
                e.printStackTrace()
            }    
        }
}

内部类 DownloadingCharacterTask : AsyncTask>() {

    override fun doInBackground(vararg params: String?): List<Characters>? {

        var parseCharacter = ParseCharacterUtility()
        return parseCharacter.parseCharacterObjectFromJSONData()
    }

    override fun onPostExecute(result: List<Characters>?) {
        super.onPostExecute(result)

        var numberOfCharacters = result?.size ?: 0
        var index: Int = 0

        while (index < result!!.size) {
            datasFromApi[index].name = result[index].name
            datasFromApi[index].height = result[index].height
            datasFromApi[index].mass = result[index].mass
            datasFromApi[index].gender = result[index].gender
            datasFromApi[index].birthYear = result[index].birthYear
        }
     }
}

标签: androidapiasynchronouskotlinglobal

解决方案


AsyncTasks即使用3个类型参数

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {

}

文档

  1. Params,执行时发送给任务的参数类型。
  2. Progress,在后台计算期间发布的进度单元的类型。
  3. Result,后台计算结果的类型。

您可以使用Result类型返回一些值并将其存储在某个全局变量中。

话虽如此,您应该重新考虑使用AsyncTask(过去是一件可怕的事情),Android 即将抛弃这个怪物。希望有帮助。


推荐阅读