Android中的与Kotlin的AsyncTask

如何使用Kotlin在Android中进行API调用?

我听说过安科 但是我想要像Android一样使用Kotlin提供的方法,我们有Asynctask作为后台操作。

AsyncTask是一个Android API ,而不是由Java或Kotlin提供的语言function 。 你可以像这样使用它们,如果你想要的话:

 class someTask() : AsyncTask() { override fun doInBackground(vararg params: Void?): String? { // ... } override fun onPreExecute() { super.onPreExecute() // ... } override fun onPostExecute(result: String?) { super.onPostExecute(result) // ... } } 

doAsyncdoAsync并不是由Kotlin提供的,因为Anko是一个使用Kotlin的语言特性来简化长代码的库。 在这里检查:

如果您使用Anko,您的代码将与以下内容类似:

 doAsync { // ... } 
 package com.irontec.kotlintest import android.os.AsyncTask import android.os.Bundle import android.support.v7.app.AppCompatActivity import android.view.Menu import android.view.MenuItem import android.widget.TextView import kotlinx.android.synthetic.main.activity_main.* import org.json.JSONObject import java.io.BufferedInputStream import java.io.BufferedReader import java.io.InputStreamReader import java.net.HttpURLConnection import java.net.URL class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) GetWeatherTask(this.text).execute() } class GetWeatherTask(textView: TextView) : AsyncTask() { val innerTextView: TextView? = textView override fun doInBackground(vararg params: Unit?): String? { val url = URL("https://raw.githubusercontent.com/irontec/android-kotlin-samples/master/common-data/bilbao.json") val httpClient = url.openConnection() as HttpURLConnection if (httpClient.responseCode == HttpURLConnection.HTTP_OK) { try { val stream = BufferedInputStream(httpClient.inputStream) val data: String = readStream(inputStream = stream) return data } catch (e: Exception) { e.printStackTrace() } finally { httpClient.disconnect() } } else { println("ERROR ${httpClient.responseCode}") } return null } fun readStream(inputStream: BufferedInputStream): String { val bufferedReader = BufferedReader(InputStreamReader(inputStream)) val stringBuilder = StringBuilder() bufferedReader.forEachLine { stringBuilder.append(it) } return stringBuilder.toString() } override fun onPostExecute(result: String?) { super.onPostExecute(result) innerTextView?.text = JSONObject(result).toString() /** * ... Work with the weather data */ } } override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.menu_main, menu) return true } override fun onOptionsItemSelected(item: MenuItem): Boolean { val id = item.itemId if (id == R.id.action_settings) { return true } return super.onOptionsItemSelected(item) } } 

链接 – Github Irontec