问题
我试过这个答案(接受的答案)。我可以使用“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")
- }
- })
复制代码
|