如何从“ doInBackground”返回多个响应

时间:2019-12-26 18:35:04

标签: android kotlin

我有以下代码,可以在其中从已经准备好的URL检索数据并将其显示在我的MPAndroid图表中,但是我想添加另一行,其中包含从另一个URL检索的数据:

inner class WeatherTaskTempLine : AsyncTask<String, Void, String>() {
    override fun onPreExecute() {
        super.onPreExecute()
    }
    override fun doInBackground(vararg params: String?): String? {
        var response:String?
        try{

            val tempData = uriToday.build().toString()
            response = URL(tempData).readText(
                    Charsets.UTF_8
            )

        }catch (e: Exception){
            response = null
        }
        return response
    }
    override fun onPostExecute(result: String?) {
        super.onPostExecute(result)
        try {
            val yVals = ArrayList<Entry>()
            val xVals = ArrayList<Entry>()
            /* Extracting JSON returns from the API */
            val jsonTemperatureData = JSONArray(result)
            for (i in 0 until jsonTemperatureData.length()) {
                val item = jsonTemperatureData.getJSONObject(i)
                val reading_temperature = item.getString("reading_temperature")
                val hour = item.getString("hour")
                yVals.add(Entry(hour.toFloat(), reading_temperature.toFloat(), i.toString()))
                //xVals.add(Entry(hour.toFloat(), reading_humidity.toFloat(), i.toString()))
            }
            val set1: LineDataSet
            set1 = LineDataSet(yVals, "Temperatura")
            val set2: LineDataSet
            set2 = LineDataSet(xVals, "Temperatura jucer")

            val dataSets = ArrayList<ILineDataSet>()
            dataSets.add(set1)
            dataSets.add(set2)
            val data = LineData(dataSets)
            chart1.setData(data)
        } catch (e: Exception) {
        }
    }
}

我可以从以下位置获取JSON数据:

           `val tempData = uriToday.build().toString()
            response = URL(tempData).readText(Charsets.UTF_8)`

但是我也想通过

   val tempData = uriArchive.build().toString()
            response = URL(tempData).readText(
                    Charsets.UTF_8
            )

因此,我可以在像这样的另一个循环中遍历该数据,并将另一行设置为我的MPAndroidChart:

  for (i in 0 until jsonTemperatureData.length()) {
  }

如果这不是正确的方法,那会是什么?

1 个答案:

答案 0 :(得分:2)

您可以从AsyncTask类返回其他数据类型,而不仅仅是字符串。

例如,您可以返回字符串的ArrayList

inner class WeatherTaskTempLine : AsyncTask<String, Void, ArrayList<String>>() {

这将使您能够从doInBackground返回多个数据

请注意,您需要在onPostExecutedoInBackground返回类型中调整结果对象类型。