如何从AsyncTask返回布尔值?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从AsyncTask返回布尔值?相关的知识,希望对你有一定的参考价值。
我有一个检查网络连接然后检查服务器可用性的功能。如果有网络连接,它将接下来检查服务器可用性。不幸的是,检查服务器可用性是通过AsyncTask
。
这就是我想要使用AsyncTask
的方式:
if(NetworkConnectionInfo(context).execute()) {
return true
} else {
return false
}
这是NetworkConnectionInfo
类
class NetworkConnectionInfo : AsyncTask<String, String, Boolean> {
private var context: Context? = null
constructor(context:Context):super(){
this.context = context
}
override fun onPreExecute() {}
override fun doInBackground(vararg p0: String?): Boolean {
try {
val url = URL("http://www.example.com/")
val urlc = url.openConnection() as HttpURLConnection
urlc.setRequestProperty("User-Agent", "test")
urlc.setRequestProperty("Connection", "close")
urlc.setConnectTimeout(1000) // mTimeout is in seconds
urlc.connect()
return urlc.getResponseCode() === 200
} catch (ex:Exception) {
ex.printStackTrace()
}
return false
}
override fun onProgressUpdate(vararg values: String?) {}
override fun onPostExecute(success: Boolean) {
if(!success) {
Toast.makeText(this.context,"Error connecting server. Please try again later.", Toast.LENGTH_LONG).show()
} else {
Toast.makeText(this.context,"Server is available.", Toast.LENGTH_LONG).show()
}
}
}
我想在success
返回onPostExecute
。我不知道如何处理这个问题。
答案
AsyncTask
没有返回值,因为它是异步的。
你必须直接在回调函数success
中使用结果(onPostExecute
)。这就是AsyncTask
的设计和应该如何使用。
override fun onPostExecute(success: Boolean) {
// call further functions depending on "success"
// Note: can access views since it runs on the UI thread
}
以上是关于如何从AsyncTask返回布尔值?的主要内容,如果未能解决你的问题,请参考以下文章
从Asynctask ONPostExecute调用片段方法