Search code examples
androidkotlinandroid-implicit-intent

Implicit Intent - java.lang.NullPointerException: Attempt to invoke virtual method on a null object reference


java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference

I am getting this error when I am trying to open a link with implicit intent. I am calling openUrl(url: String) in Settings.kt activity from it's adapter class SettingsAdapter.kt through a setOnClcikListener on a ImageView.

SettingsAdapter.kt Class

private val settings = Settings()
youtubeLink.setOnClickListener {
            val url = "https://www.youtube.com/watch?v=i-0FtaAadeM"
            settings.openUrl(url)
        }

Settings.kt Activity

fun openUrl(url: String) {
        val intent = Intent(Intent.ACTION_VIEW,Uri.parse(url))
        startActivity(intent)
    }

Solution

  • You are following wrong approach. You can do this in two ways.

    1. You can directly call code snippet in your adapter

        youtubeLink.setOnClickListener {
           val url = "https://www.youtube.com/watch?v=i-0FtaAadeM"
           val intent = Intent(Intent.ACTION_VIEW,Uri.parse(url))
           context.startActivity(intent)
       }
      
    2. You can create a callback in your adapter and implement in your activity

       private OnSettingsListener listener;
      
      void setOnSttingListener(OnSettingsListener listener){
        this.listener = listener;
      }
      
      youtubeLink.setOnClickListener {
           val url = "https://www.youtube.com/watch?v=i-0FtaAadeM"
           listener.onSettingClick(url);
       }
      
      interface OnSettingsListener {  
        void onSettingClick(String url);     
      }
      

      In your activity, implement this listener

       Settings implements SettingsAdapter.OnSettingsListener {
      
       @Override
       public void onSettingClick(String url) {
        openUrl(url)
      }
      }