在 kotlin 中检查互联网连接 android
问题我试过这个答案(接受的答案)。我可以使用“PING”方法,但是 UI 变黑了,因为它说它阻塞了 UI 线程。它看起来不好看也不令人不安,所以我尝试了第二种方法“连接到互联网上的套接字”,但我不知道如何在 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”) }
它不起作用并导致错误。上面说我必须通过“消费者”。
我的问题是如何使用该类?
回答
像这样调用 AsyncTask ,它应该可以工作。您无需更改 InternetCheck 异步任务中的任何内容。基本上,您需要传入一个对象,该对象实现了 InternetCheck 类中定义的消费者接口。
InternetCheck(object : InternetCheck.Consumer {
override fun accept(internet: Boolean?) {
Log.d("test", "asdasdas")
}
})
页:
[1]