Сбой HttpUrlConnection.connect - PullRequest
       3

Сбой HttpUrlConnection.connect

1 голос
/ 16 февраля 2020

Я пытался создать небольшое приложение, которое подключается к URL-адресу в editText и возвращает код состояния.

Вот код 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 () возникает ошибка Разрешение Inte rnet установлено в манифесте android. Что вызывает эту проблему?

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)

Ответы [ 2 ]

1 голос
/ 16 февраля 2020

Для тех, кто не читал чат:

URLUtil.isValidUrl(url) не проверяет, что рассматриваемый URL действительно может быть разрешен для веб-сайта / сервера. Это означает, что когда соединение вызывается на несуществующем веб-сайте / сервере, генерируется исключение, так как подключаться нечего.

0 голосов
/ 16 февраля 2020

Привет, пожалуйста, проверьте, предоставили ли вы разрешение inte rnet в вашем манифесте,

<manifest >
 <uses-permission android:name="android.permission.INTERNET" />
 <application> 
  ...
 </application> 
</manifest>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...