[英]HttpUrlConnection.connect fails
I've been trying to create a small app that connects to url in editText and returns the status code.我一直在尝试创建一个连接到 editText 中的 url 并返回状态代码的小应用程序。
Here is the onCreate code:这是 onCreate 代码:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button.setOnClickListener {
val url = editText.text.toString()
var connection: HttpURLConnection? = null
if (URLUtil.isValidUrl(url)) {
connection = URL(url).openConnection() as HttpURLConnection
var thr = Thread {
connection.connect()
val code = connection.responseCode
runOnUiThread {
if (code != 404 && code != 500) {
textView.text = "Ok"
} else {
textView.text = "Failed"
}
}
}
thr.start()
thr.join()
} else {
textView.text = "Failed"
}
}
The problem is that whenever URL is valid, runtime error occurs in .connect() method.问题是只要 URL 有效,.connect() 方法就会发生运行时错误。 Internet permission is set up in android manifest.
互联网权限在android清单中设置。 What causes that issue?
是什么导致了这个问题?
E/AndroidRuntime: FATAL EXCEPTION: Thread-2
Process: com.example.company.myapplication, PID: 27183
java.net.SocketException: socket failed: EPERM (Operation not permitted)
at java.net.Socket.createImpl(Socket.java:492)
at java.net.Socket.getImpl(Socket.java:552)
at java.net.Socket.setSoTimeout(Socket.java:1180)
at com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:143)
at com.android.okhttp.internal.io.RealConnection.connect(RealConnection.java:116)
at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:186)
at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:128)
at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:97)
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:289)
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:232)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:465)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:131)
at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.connect(DelegatingHttpsURLConnection.java:90)
at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:30)
at com.example.company.myapplication.MainActivity$onCreate$1$thr$1.run(MainActivity.kt:25)
at java.lang.Thread.run(Thread.java:919)
For those who didn't read chat:对于那些没有阅读聊天的人:
URLUtil.isValidUrl(url)
doesn't check that the url in question actually can be resolved to a website/server. URLUtil.isValidUrl(url)
不检查有问题的 url 是否实际上可以解析为网站/服务器。 This means that when connect is called on a website/server that doesn't exist, an exception is thrown, since there is nothing to connect to.这意味着当在一个不存在的网站/服务器上调用 connect 时,会抛出异常,因为没有任何东西可以连接。
Hi please check if you have provided the permission of internet in your manifest,嗨,请检查您是否在清单中提供了互联网许可,
<manifest >
<uses-permission android:name="android.permission.INTERNET" />
<application>
...
</application>
</manifest>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.