【发布时间】:2020-05-31 15:14:11
【问题描述】:
我一直在尝试创建一个连接到editText中的url并返回状态码的小应用程序。
这里是 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"
}
}
问题是只要 URL 有效,.connect() 方法中就会出现运行时错误。上网权限是在 android manifest 中设置的。是什么导致了这个问题?
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)
【问题讨论】:
-
你能告诉我们确切的 RuntimeException + stacktrace 吗?
-
是的,应该从一开始就添加它
-
您是在模拟器还是实际设备上运行?其他需要模拟器/设备上的应用程序的网络是否可以工作?