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) // ... } }
doAsync
的doAsync
并不是由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
- 如何在Android中使用SIM卡获取手机号码使用kotlin语言编程?
- java.lang.NoClassDefFoundError:kotlin.jvm.internal.Intrinsics – newApplication
- Kotlin:以函数的forms传递对象作为参考,并改变它的实例
- gRPC protobuf不能用kotlin编译(Android Studio 3.0)
- Android – 在Kotlin中声明和使用视图
- 运行时权限请求不起作用
- Android:与Butterknife的Kotlin
- 如何在Anko DSL布局中设置底部边距为FAB?
- 为什么这个Kotlin扩展失败Android Studio Lint检查?