我如何将API中的数据分配给Android中的全局变量?

问题描述 投票:0回答:2

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

}

android api asynchronous kotlin global
2个回答
0
投票

AsyncTasks使用3个类型参数,即

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

}

docs

  1. Params,执行时发送给任务的参数类型。
  2. Progress,后台计算过程中发布的进度单位的类型。
  3. Result,背景计算结果的类型。

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

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


0
投票

尝试一下,

datasFromApi = innerClassObject.execute().get();

它可以获得一个返回值,但是在那个时候阻塞了UIThread。也就是说,使用get()时,它在获取返回值时是同步而不是异步的。如果没有与UI相关的处理,则可以使用get()。

© www.soinside.com 2019 - 2024. All rights reserved.