Wątek przeniesiony 2022-01-22 23:39 z Java przez cerrato.

Problem z WebView Android

0

Hej,
Prośba o pomoc. Dlaczego podkreśla mi webview na czerowno w 8, 9 i 11 linii. Dodałem do do mainfestu. Z góry dziękuje za pomoc.


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)


        setContentView(R.layout.activity_main)
        findViewById<Button>(R.id.sendRequest).setOnClickListener { sendRequest() }

        webview.webChromeClient = WebChromeClient()
        webview.settings.javaScriptEnabled = true

        webview.webViewClient = object : WebViewClient() {
            override fun onReceivedSslError(
                view: WebView?,
                handler: SslErrorHandler,
                er: SslError?
            ) {
                handler.proceed()
                // Ignore SSL certificate errors
            }
        }
    }

    <WebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />

0

A nie brak tutaj takiej wesołej linijki?: val myWebView: WebView = findViewById(R.id.webview)

0

Najedź kursorem w Android Studio i tam powinien się błąd wyświetlić. Albo zrób screnshota tego albo przepisz tutaj / do google.

Jeszcze możesz uruchomić program i kompilator będzie płakał w okienku Build. Możesz przekleić treść błędu

0
AAPT: error: unexpected element <WebView> found in <manifest>.

screenshot-20220123193607.png

0

To są 2 błędy.

  1. <WebView> nie powinno być w manifeście. Powinno być w layoutcie activity_main .xml
  2. żeby mieć dostęp do tak zadeklraowanego webview i mieć możliwość go używać w taki sposób webview.webChromeClient musisz go najpierw pobrać
    np. w taki sposób:
val myWebView: WebView = findViewById(R.id.webview)

webview.webChromeClient = WebChromeClient()
webview.settings.javaScriptEnabled = true
0

Taki mam aktualnie kod:

   override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContentView(R.layout.activity_main)
        findViewById<Button>(R.id.sendRequest).setOnClickListener { sendRequest() }

        val myWebView: WebView = findViewById(R.id.webview)

        webview.webChromeClient = WebChromeClient()
        webview.settings.javaScriptEnabled = true

        webview.webViewClient = object : WebViewClient() {
            override fun onReceivedSslError(
                view: WebView?,
                handler: SslErrorHandler,
                er: SslError?
            ) {
                handler.proceed()
                // Ignore SSL certificate errors
            }
        }
    }

Dostaję poniższy błąd w liniach 9,10 i 12

Unresolved reference: webview
1

@fajny_bolek:

webview.webChromeClient = WebChromeClient()
        webview.settings.javaScriptEnabled = true
[...]
webview.webViewClient = object : WebViewClient() {

Tu nie powinieneś się odwoływać do myWebView?

(Nie znam się na Kotlinie)

0

@fajny_bolek: No offense chłopie, ale Ty wiesz czym są obiekty, referencje, klasy i inne czary? Przypomnij to sobie, bo z tego co na razie widzę, to poruszasz się po omacku.

3

@fajny_bolek: brakuje Ci podstaw. Przeczytaj o Kotlinie.
Deklarujesz stałą o nazwie myWebView a za chwilę się chcesz odwołać poprzez webview która nie istnieje.
Jeżeli w layoucie masz widok który ma id webview to nie znaczy że obiekt zwrócony przez findViewById też będzie miał taką nazwę (może mieć)
W Twoim przypadku to:
val myWebView: WebView = findViewById(R.id.webview)
oznacza że

  • stała val referencja o nazwie myWebView
  • typ obiektu to WebView
  • do referencji val myWebView: przypisujesz to co zwróci findViewById
  • w laycie xml szukasz obiektu który MUSI mieć zadeklarowane android:id w tym przypadku jest to android:id="+@id/webview"

Podstawy

1 użytkowników online, w tym zalogowanych: 0, gości: 1