【问题标题】:How can I assign data from API to a global variable in Android?如何将 API 中的数据分配给 Android 中的全局变量?
【发布时间】:2020-02-24 23:50:35
【问题描述】:

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


【解决方案1】:

试试这个,

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

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

【讨论】:

  • 有一个 UI 线程但将它们分开。然后它工作了伙计!谢谢
【解决方案2】:

AsyncTasks使用3个类型参数,即

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

}

来自docs

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

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

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

【讨论】:

    猜你喜欢
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-25
    • 2020-07-06
    • 2014-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多