如何使用RxJava / Rx Android Kotlin实现Internet Android的检查?

问题描述 投票:0回答:1

检查互联网的答案于2014年发布在此帖子中:https://stackoverflow.com/a/27312494/12359431

但是,在其中一个答案中,有这段代码

fun hasInternetConnection(): Single<Boolean> {
  return Single.fromCallable {
    try {
      // Connect to Google DNS to check for connection
      val timeoutMs = 1500
      val socket = Socket()
      val socketAddress = InetSocketAddress("8.8.8.8", 53)

      socket.connect(socketAddress, timeoutMs)
      socket.close()

      true
    } catch (e: IOException) {
      false
    }
  }
  .subscribeOn(Schedulers.io())
  .observeOn(AndroidSchedulers.mainThread())
}

我已经通过在底部的代码中实现上面的代码来进行尝试。但是,它只是崩溃了,因此我无法找到有关应用程序为什么崩溃的错误的任何信息。

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    /* Initialise Azure Service Adapter */
    AzureServiceAdapter.Initialize(this)

    hasInternetConnection().subscribe{hasInternet->
                    /*Call database and check phone number*/
                    Log.i("Logger", "Connected")}

    /* Authentication */
    authUser()

}
}

这是我的实现

implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
implementation 'io.reactivex.rxjava3:rxjava:3.0.0'

我缺少什么,还是不应该添加到MainActivity文件中?还是关于为什么我的Kotlin应用程序崩溃的线索?

android rx-java kotlin-android-extensions
1个回答
0
投票

那是因为您不能在主线程上调用它。

© www.soinside.com 2019 - 2024. All rights reserved.