Sumit Jangra
Sumit Jangra

Reputation: 147

Android Kotlin - WebView shows blank page

I have tried everything but still no luck. My webview always shows a blank screen. My main motive is to load pdf files from the server.

activity_web_view.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".activities.WebViewActivity">

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

</RelativeLayout>

WebViewActivity.kt

class WebViewActivity : AppCompatActivity() {
    private val url: String = "https://www.google.co.in/"
    override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
        super.onCreate(savedInstanceState, persistentState)
        setContentView(R.layout.activity_web_view)

        initWebView()
        setWebClient()
        loadUrl(url)

    }

    @SuppressLint("SetJavaScriptEnabled")
    private fun initWebView() {
        webView.settings.javaScriptEnabled = true
        webView.settings.loadWithOverviewMode = true
        webView.settings.useWideViewPort = true
        webView.settings.domStorageEnabled = true
        webView.webViewClient = object : WebViewClient() {
            override
            fun onReceivedSslError(view: WebView?, handler: SslErrorHandler?, error: SslError?) {
                handler?.proceed()
            }
        }
    }

    private fun setWebClient() {
        webView.webChromeClient = object : WebChromeClient() {
            override fun onProgressChanged(
                view: WebView,
                newProgress: Int
            ) {
                super.onProgressChanged(view, newProgress)
            }
        }
    }

    private fun loadUrl(pageUrl: String) {
        webView.loadUrl(pageUrl)
    }
}

Invocation from Main Activity

 val intent = Intent(this, WebViewActivity::class.java)
                startActivity(intent)

I don't know what I am doing wrong. Help is much appreciated.

Thanks in advance.

Upvotes: 0

Views: 948

Answers (2)

Iqbal Alhadad
Iqbal Alhadad

Reputation: 3

This fragment webview show blank page in kotlin:

    override fun setupView() {
            //val mWebView: WebView? = view?.findViewById(R.id.webviewdaum) as WebView
            //mWebView?.loadUrl("https://www.greenhcm.com/")
            //val webSettings = mWebView?.getSettings()
            //webSettings?.setJavaScriptEnabled(true)
            // Force links and redirects to open in the WebView instead of in a browser
            //mWebView?.setWebViewClient(WebViewClient())


        //var mywebview: WebView? = null

        val mywebview: WebView = view?.findViewById(R.id.webviewdaum) as WebView
        mywebview!!.webViewClient = object : WebViewClient() {
            override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
                view?.loadUrl(url)
                return true
            }
        }
        mywebview!!.loadUrl("https://www.google.com/")
        // Enable Javascript
        val webSettings: WebSettings = mywebview.getSettings()
        webSettings.javaScriptEnabled = true
        mywebview.settings.loadWithOverviewMode = true
        mywebview.settings.useWideViewPort = true
        mywebview.settings.domStorageEnabled = true
        // Force links and redirects to open in the WebView instead of in a browser

        // Force links and redirects to open in the WebView instead of in a browser
        mywebview.setWebViewClient(WebViewClient())
    }

The error message is

2020-10-27 12:33:38.773 11545-11545/com.greenhcm.android D/EgretLoader: EgretLoader(Context context) 2020-10-27 12:33:38.774 11545-11545/com.greenhcm.android D/EgretLoader: The context is not activity

Upvotes: 0

Dmitri
Dmitri

Reputation: 2972

Use:

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

        setContentView(R.layout.activity_web_view)

        println("in webview")//--> add this to confirm this is actually called

        initWebView()
        setWebClient()
        loadUrl(url)
}

Not the one you used. The other one is for persistable reboots, and will not be called under normal circumstances, and you would need to mark the activity as such in your manifest:

https://developer.android.com/reference/android/R.attr.html#persistableMode

Upvotes: 1

Related Questions