我试了this个答案(被接受的答案).我可以使用"PING"方法,但是UI变黑了,因为它说它会阻止UI线程.它看起来不太好,令人不安,所以我try 使用第二种方法"连接到Internet上的套接字",但我不知道如何使用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)
}
}

but I DONT KNOW HOW TO USE IT. I tried this way:

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

It didnt work and results in an error. It says I have to pass "Consumer".

My question is How to use that class?

推荐答案

这样调用AsyncTask,它应该可以工作.你不需要在任务中做任何改变.基本上,您需要传入一个实现InternetCheck类中定义的使用者接口的对象.

InternetCheck(object : InternetCheck.Consumer {
    override fun accept(internet: Boolean?) {
        Log.d("test", "asdasdas")
    }
})

Kotlin相关问答推荐

用普通Kotlin理解Gradle的Kotlin DSL'""

无法访问类kotlin.coroutines.CoroutineContext';.判断模块类路径中是否存在丢失或冲突的依赖项

在 Kotlin 中定义基于多态函数的泛型函数

Java/Kotlin中类似Rust般的注释编译?

Rabin-Karp字符串匹配的实现(Rolling hash)

JetPack Compose:添加点击持续时间

使用 LazyListScope 嵌套可组合项

添加 Kapt 插件后 - 执行 org.jetbrains.kotlin.gradle.internal.KaptExecution 时发生故障

TestContainers PostgreSQLContainer 与 Kotlin 单元测试:Not enough information to infer type variable SELF

在 kotlin 中模拟伴随对象函数

如何为你的 Flutter 元素添加 Kotlin 支持?

jetpack compose 将参数传递给 viewModel

将协同路由调用放在存储库或ViewModel中哪个更好?

Android:在 DAO 中使用 Room 数据库和 LiveData 架构

Kotlin-通过与属性列表进行比较来筛选对象列表

Kotlin协程处理错误和实现

Kotlin:如何修改成对的值?

如何使用协调器布局和行为在CardView上完成此动画?

访问Kotlin中的属性委托

如何在 Kotlin 中按字母顺序对字符串进行排序