0

Пытаюсь создать интернет подключение к сайту. Сервер сайта работает, а вот запрос через Kotlin не очень. Пробовал все способы, но не один метод не помог. Буду дать вашу помощь. В Manifest есть разрешение. При попытке отправить запрос я получаю :

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.quenzer.executeapp, PID: 27926
java.lang.IllegalStateException: Could not execute method for android:onClick
    at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:414)
    at android.view.View.performClick(View.java:7217)
    at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119)
    at android.view.View.performClickInternal(View.java:7191)
    at android.view.View.access$3500(View.java:828)
    at android.view.View$PerformClick.run(View.java:27679)
    at android.os.Handler.handleCallback(Handler.java:900)
    at android.os.Handler.dispatchMessage(Handler.java:103)
    at android.os.Looper.loop(Looper.java:219)
    at android.app.ActivityThread.main(ActivityThread.java:8349)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055)
 Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Method.invoke(Native Method)
    at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:409)
    at android.view.View.performClick(View.java:7217) 
    at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119) 
    at android.view.View.performClickInternal(View.java:7191) 
    at android.view.View.access$3500(View.java:828) 
    at android.view.View$PerformClick.run(View.java:27679) 
    at android.os.Handler.handleCallback(Handler.java:900) 
    at android.os.Handler.dispatchMessage(Handler.java:103) 
    at android.os.Looper.loop(Looper.java:219) 
    at android.app.ActivityThread.main(ActivityThread.java:8349) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055) 
 Caused by: java.lang.ClassCastException: com.android.okhttp.internal.huc.HttpURLConnectionImpl cannot be cast to javax.net.ssl.HttpsURLConnection
    at com.quenzer.executeapp.MainActivity.Execute(MainActivity.kt:27)
    at java.lang.reflect.Method.invoke(Native Method) 
    at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:409) 
    at android.view.View.performClick(View.java:7217) 
    at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119) 
    at android.view.View.performClickInternal(View.java:7191) 
    at android.view.View.access$3500(View.java:828) 
    at android.view.View$PerformClick.run(View.java:27679) 
    at android.os.Handler.handleCallback(Handler.java:900) 
    at android.os.Handler.dispatchMessage(Handler.java:103) 
    at android.os.Looper.loop(Looper.java:219) 
    at android.app.ActivityThread.main(ActivityThread.java:8349) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1055) 

Сам код.

package com.quenzer.executeapp

import android.os.Build import android.os.Bundle import android.view.View import androidx.annotation.RequiresApi import androidx.appcompat.app.AppCompatActivity import com.google.android.material.textfield.TextInputEditText import java.net.URL import javax.net.ssl.HttpsURLConnection

private lateinit var Input: TextInputEditText

class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) Input = findViewById(R.id.TextInput) }

@RequiresApi(Build.VERSION_CODES.N)
fun Execute(view: View) {
    val countString = Input.text.toString()
    // val url = URL("http://v913463x.beget.tech/index.php?Text=$countString")
    val url = URL("http://v913463x.beget.tech/index.php?Text=$countString")
    var connection = url.openConnection() as HttpsURLConnection
    connection.setRequestMethod("GET") // установка метода получения данных -GET
    connection.setReadTimeout(10000) // установка таймаута перед выполнением - 10 000 миллисекунд
    connection.connect() // подключаемся к ресурсу
}

}

Andrew
  • 17,943
  • У вас сайт по http, а вы пытаетесь открыть его через HttpsURLConnection. Либо HttpUrlConnection, либо сайт по https. – Yura Ivanov Aug 17 '21 at 15:42
  • В ошибке у вас написано, что класс com.android.okhttp.internal.huc.HttpURLConnectionImpl не может быть приведен к классу javax.net.ssl.HttpsURLConnection. И даже указано, что это происходит в 27 строке вашего кода. Уберите приведение типа as HttpsURLConnection, падает из-за этого. – Vadik Sirekanyan Aug 18 '21 at 14:46

1 Answers1

0

Доходим до последнего Caused by в стектрейсе и видим:

Caused by: ClassCastException: HttpURLConnectionImpl cannot be cast to HttpsURLConnection
    at com.quenzer.executeapp.MainActivity.Execute(MainActivity.kt:27)

Это означает, что в вашем классе MainActivity.kt на строчке 27 произошло исключение ClassCastException. А именно, не удалось тип HttpURLConnectionImpl привести к типу HttpsURLConnection.

Чтобы двигаться дальше, уберите приведение типа as HttpsURLConnection.

Вот этот ответ поможет вам разобраться, как читать стектрейсы.