Null Pointer exception when using progressbar with webview

35 Views Asked by At

I'm encountering a NullPointerException in my Android app when trying to load a WebView inside a Fragment. The error occurs specifically in the onProgressChanged() method of the WebViewClient. Here's the relevant part of the stack trace: java.lang.NullPointerException at com.example.card.SettingsFragment.getBinding(SettingsFragment.kt:36) at com.example.card.SettingsFragment.access$getBinding(SettingsFragment.kt:34) at com.example.card.SettingsFragment$onViewCreated$1.onProgressChanged(SettingsFragment.kt:53)

And here's the code snippet:


class SettingsFragment : Fragment() {
    private var _binding: FragmentSettingsBinding? = null
    private val binding get() = _binding!!

    private val TAG = "SettingsFragment"
    
    private lateinit var webView: WebView
    val url = "https://example.com"
    
    @SuppressLint("SetJavaScriptEnabled")
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        webView = binding.webviewForDigiLocker
        webView.webChromeClient = object : WebChromeClient() {
            override fun onProgressChanged(view: WebView?, newProgress: Int) {
                super.onProgressChanged(view, newProgress)
                Log.e(TAG, "$newProgress")
                //here causing problem
                binding.progressBar.progress = newProgress
                if (newProgress == 100) {
                    binding.loader.visibility = View.GONE
                    binding.progressBar.visibility = View.GONE
                }
            }
        }

        webView.webViewClient = object : WebViewClient() {
            override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
                super.onPageStarted(view, url, favicon)
                Log.e(TAG, "PageStarted")
                binding.progressBar.visibility = View.VISIBLE
                binding.loader.visibility = View.VISIBLE
            }
        }
        webView.settings.javaScriptEnabled = true
        webView.settings.allowContentAccess = true
        webView.settings.domStorageEnabled = true
        webView.isSaveEnabled = true
        webView.loadUrl(url)
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
    ): View {
        _binding = FragmentSettingsBinding.inflate(inflater, container, false)

        return binding.root
    }

    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
        Log.e(TAG,"DestroyView")
    }
}

It seems like the binding object is null when trying to access binding.progressBar and binding.loader, causing the NullPointerException. However, I'm not sure why this is happening, as I've properly initialized the binding object in onCreateView(). I am also making it null when in OnDestroyView

Any insights on why this error might be occurring and how to resolve it would be greatly appreciated. Thanks!

0

There are 0 best solutions below