繁体   English   中英

Kotlin - 检查 URL 是否可达

[英]Kotlin - Check if URL is reachable

我有一个小应用程序,它在 WebView 中显示一个网页。 当用户第一次启动应用程序时,他需要在类似向导的活动中输入网站数据(URL、http/https、端口、用户名和密码)。 在保存数据之前,我需要检查 URL 是否可达。

我尝试了一些我在这里找到的东西(其中大部分是在 Java 中),但到目前为止我无法让它工作。

这是我发现的一种方法,虽然我觉得有点奇怪,但我决定试一试,但没有任何反应。

val runtime = Runtime.getRuntime()
val proc = runtime.exec("ping www.google.com")

val mPingResult = proc.waitFor()
if (mPingResult == 0)
{
    isReachable = true
}

return isReachable!!

这始终返回 false,没有特定错误(即使在 google.com 上检查时)。

return try
{
    InetAddress.getByName("https://www.google.com").isReachable(3000)
    true
}
catch (e: Exception) { false }

我尝试的最后一件事失败了,因为它们应该在主线程上运行(我实际上是在试图阻止用户继续前进,直到服务器响应)

val url = URL("http://www.google.com")
val connection: HttpURLConnection = url.openConnection() as HttpURLConnection
val code: Int = connection.responseCode

if (code == 200) { isReachable = true }

return isReachable!!

val url = URL("http://www.google.com")
val urlc = url.openConnection() as HttpURLConnection
urlc.connectTimeout = 10 * 1000 // 10 s.
urlc.connect()
if (urlc.responseCode == 200)
{
    Log.wtf("Connection", "Success !")
    isReachable = true
}

return isReachable!!

HttpURLConnection.setFollowRedirects(false)
val httpURLConnection = (URL("https://www.google.com").openConnection() as HttpURLConnection)
httpURLConnection.requestMethod = "HEAD"
httpURLConnection.setRequestProperty(
    "User-Agent",
    "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)"
)
return try { httpURLConnection.responseCode == HttpURLConnection.HTTP_OK }
catch (e: IOException) { false }
catch (e: UnknownHostException){ false }

撇开我在主线程上运行这些并且我不应该运行这些事实不谈,我在这里做错了什么? 第一次尝试在 Kotlin / Android 中执行此操作,所以我很确定这很简单,我错过了。

您可能知道我们不能在主线程上运行网络操作,因为它会导致 ANR 场景。 你可以在这里做的是显示一个加载器并在 IO 线程上启动你的网络调用。 收到回调后,关闭加载程序并重定向到 Webview 并请求加载 url。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM