【发布时间】:2018-07-02 18:34:39
【问题描述】:
我尝试了this 的答案(已接受的答案)。我可以使用“PING”方法,但是 UI 变黑了,因为它说它会阻塞 UI 线程。它看起来不太好并且令人不安,所以我尝试使用第二种方法“连接到 Internet 上的 Socket”,但我不知道如何在 Kotlin 中使用该类。
这是android studio把Java转成kotlin的结果
package com.mockie.daikokuten.helpers
import android.os.AsyncTask.execute
import android.os.AsyncTask
import java.io.IOException
import java.net.InetSocketAddress
import java.net.Socket
internal class InternetCheck(private val mConsumer: Consumer) : AsyncTask<Void, Void, Boolean>() {
interface Consumer {
fun accept(internet: Boolean?)
}
init {
execute()
}
override fun doInBackground(vararg voids: Void): Boolean? {
try {
val sock = Socket()
sock.connect(InetSocketAddress("8.8.8.8", 53), 1500)
sock.close()
return true
} catch (e: IOException) {
return false
}
}
override fun onPostExecute(internet: Boolean?) {
mConsumer.accept(internet)
}
}
但是我不知道如何使用它。我试过这样:
InternetCheck{ internet-> Log.d("test", "asdasdas") }
它不起作用并导致错误。它说我必须通过“消费者”。
我的问题是如何使用该类?
【问题讨论】: