Android 如何从“返回多个响应”;“doInBackground”;
我有这段代码,可以从已经准备好的URL中检索数据并将其显示在我的MPAndroid图表中,但我想添加另一行,其中包含从另一个URL检索的数据:Android 如何从“返回多个响应”;“doInBackground”;,android,kotlin,Android,Kotlin,我有这段代码,可以从已经准备好的URL中检索数据并将其显示在我的MPAndroid图表中,但我想添加另一行,其中包含从另一个URL检索的数据: inner class WeatherTaskTempLine : AsyncTask<String, Void, String>() { override fun onPreExecute() { super.onPreExecute() } override fun doInBackground(v
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) {
}
}
}
但我也想通过考试
val tempData = uriArchive.build().toString()
response = URL(tempData).readText(
Charsets.UTF_8
)
因此,我可以在另一个循环中迭代该数据,如下图所示,并在我的MPAndroidChart中设置另一行:
for (i in 0 until jsonTemperatureData.length()) {
}
如果这不是一种正确的方法,那会是什么 您可以从AsyncTask类返回除字符串以外的其他数据类型 例如,可以返回字符串的ArrayList
inner class WeatherTaskTempLine : AsyncTask<String, Void, ArrayList<String>>() {
内部类WeatherTaskTempLine:AsyncTask(){
这将允许您从doInBackground
注意:您需要调整
onPostExecute
中的结果对象类型以及doInBackground
返回类型。id强烈建议您在声明AsyncTask时,了解为什么要使用这些泛型类型,因为它们在哪里使用。由于它们是泛型的,您可以使用它们将每个类放在这3个位置
inner class WeatherTaskTempLine : AsyncTask<String, Void, ArrayList<String>>() {