52ky 发表于 2022-5-4 15:35:47

在 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]
查看完整版本: 在 kotlin 中检查互联网连接 android