找回密码
 立即注册
问题
我试过这个答案(接受的答案)。我可以使用“PING”方法,但是 UI 变黑了,因为它说它阻塞了 UI 线程。它看起来不好看也不令人不安,所以我尝试了第二种方法“连接到互联网上的套接字”,但我不知道如何在 Kotlin 中使用该类。

这是 android studio 将 java 转换为 kotlin 的结果
  1. package com.mockie.daikokuten.helpers

  2. import android.os.AsyncTask.execute
  3. import android.os.AsyncTask
  4. import java.io.IOException
  5. import java.net.InetSocketAddress
  6. import java.net.Socket


  7. internal class InternetCheck(private val mConsumer: Consumer) : AsyncTask<Void, Void, Boolean>() {
  8. interface Consumer {
  9.     fun accept(internet: Boolean?)
  10. }

  11. init {
  12.     execute()
  13. }

  14. override fun doInBackground(vararg voids: Void): Boolean? {
  15.     try {
  16.         val sock = Socket()
  17.         sock.connect(InetSocketAddress("8.8.8.8", 53), 1500)
  18.         sock.close()
  19.         return true
  20.     } catch (e: IOException) {
  21.         return false
  22.     }

  23. }

  24. override fun onPostExecute(internet: Boolean?) {
  25.     mConsumer.accept(internet)
  26. }
  27. }
复制代码

但我不知道如何使用它。我试过这样做:

InternetCheck{ internet->Log.d(“test”, “asdasdas”) }

它不起作用并导致错误。上面说我必须通过“消费者”。

我的问题是如何使用该类?

回答
像这样调用 AsyncTask ,它应该可以工作。您无需更改 InternetCheck 异步任务中的任何内容。基本上,您需要传入一个对象,该对象实现了 InternetCheck 类中定义的消费者接口。
  1. InternetCheck(object : InternetCheck.Consumer {
  2.     override fun accept(internet: Boolean?) {
  3.         Log.d("test", "asdasdas")
  4.     }
  5. })
复制代码






上一篇:scikit learn和tensorflow有什么区别?可以一起使用吗?
下一篇:如何查询rabbitmq_exporter