title: mp.isPlaying() is throwing Fatal NullPointerException
body: <p>I have an application that plays sounds on button press.</p>
  
  <p>I'm trying to force the MediaPlayer to mute on incoming call and to continue at normal volume afterwards (in idle mode).</p>
  
  <p>I've wrote the below code to do exactly this, although it's crashing under NullPointerException on the following line.</p>
  
  <pre><code>if (mp.isPlaying() &amp;&amp; state == TelephonyManager.CALL_STATE_RINGING) {
  </code></pre>
  
  <p>Because of</p>
  
  <pre><code>mp.isPlaying()
  </code></pre>
  
  <p>Can anyone identify why this is happening? Later on in my code I reference mp to play sounds.</p>
  
  <pre><code>    // Release any resources from previous MediaPlayer
      if (mp != null) {
          mp.release();
      }
      // Create a new MediaPlayer to play this sound
      mp = MediaPlayer.create(this, resId);
      mp.setLooping(true);
      mp.start();
  </code></pre>
  
  <p><strong>This is my on call mute and on idle resume code.</strong></p>
  
  <pre><code>protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
  
      PhoneStateListener phoneStateListener = new PhoneStateListener() {
          @Override
          public void onCallStateChanged(int state, String incomingNumber) {
              if (mp.isPlaying() &amp;&amp; state == TelephonyManager.CALL_STATE_RINGING) {
                  mp.setVolume(0,0);
              } else if(mp.isPlaying() &amp;&amp; state == TelephonyManager.CALL_STATE_IDLE) {
                  mp.setVolume(1,1);
              } else if(mp.isPlaying() &amp;&amp; state == TelephonyManager.CALL_STATE_OFFHOOK) {
                  mp.setVolume(0,0);
              }
              super.onCallStateChanged(state, incomingNumber);
          }
      };
  
      TelephonyManager mgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
      if(mgr != null) {
          mgr.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
      }
  </code></pre>
  
  <p>I cannot understand why mp is Null if it's called later on in the application. If it's not playing will that return null? If so how would I get around this.</p>
  
  <p><strong>This is my whole activity as requested.</strong></p>
  
  <pre><code>import android.app.Activity;
  import android.app.Notification;
  import android.app.NotificationManager;
  import android.app.PendingIntent;
  import android.app.TaskStackBuilder;
  import android.content.Context;
  import android.content.Intent;
  import android.media.AudioManager;
  import android.media.MediaPlayer;
  import android.net.Uri;
  import android.os.Bundle;
  import android.support.v4.app.NotificationCompat;
  import android.telephony.PhoneStateListener;
  import android.telephony.TelephonyManager;
  import android.view.Menu;
  import android.view.View;
  import android.view.View.OnClickListener;
  import android.view.Window;
  import android.widget.Button;
  import android.widget.ImageView;
  
  
  public class MainActivity extends Activity implements OnClickListener{
      private MediaPlayer mp;
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
  
          PhoneStateListener phoneStateListener = new PhoneStateListener() {
              @Override
              public void onCallStateChanged(int state, String incomingNumber) {
                  if (mp.isPlaying() &amp;&amp; state == TelephonyManager.CALL_STATE_RINGING) {
                      mp.setVolume(0,0);
                  } else if(mp.isPlaying() &amp;&amp; state == TelephonyManager.CALL_STATE_IDLE) {
                      mp.setVolume(1,1);
                  } else if(mp.isPlaying() &amp;&amp; state == TelephonyManager.CALL_STATE_OFFHOOK) {
                      mp.setVolume(0,0);
                  }
                  super.onCallStateChanged(state, incomingNumber);
              }
          };
  
          TelephonyManager mgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
          if(mgr != null) {
              mgr.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
          }
  
          setVolumeControlStream(AudioManager.STREAM_MUSIC);
          Button button1=(Button)findViewById(R.id.button_1);
          Button button2=(Button)findViewById(R.id.button_2);
          Button button3=(Button)findViewById(R.id.button_3);
          Button button4=(Button)findViewById(R.id.button_4);
          Button button5=(Button)findViewById(R.id.button_5);
          Button button6=(Button)findViewById(R.id.button_6);
          Button button7=(Button)findViewById(R.id.button_7);
          Button button8=(Button)findViewById(R.id.button_8);
  
          final ImageView button_stop=(ImageView)findViewById(R.id.button_stop);
          ImageView button_rate=(ImageView)findViewById(R.id.button_rate);
          ImageView button_exit=(ImageView)findViewById(R.id.button_exit);
          button1.setOnClickListener(this);
          button2.setOnClickListener(this);
          button3.setOnClickListener(this);
          button4.setOnClickListener(this);
          button5.setOnClickListener(this);
          button6.setOnClickListener(this);
          button7.setOnClickListener(this);
          button8.setOnClickListener(this);
          button_stop.setOnClickListener(new View.OnClickListener() {
              public void onClick(View v) {
                  if(null!=mp){
                      mp.release();
                      button_stop.setImageResource(R.drawable.ic_action_volume_muted);
                       }
              }});
  
          button_exit.setOnClickListener(new View.OnClickListener() {
              public void onClick(View v) {
                  NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
                  notificationManager.cancel(0);
                  finish();
              }});
  
          button_rate.setOnClickListener(new View.OnClickListener() {
              public void onClick(View v) {
  
                  String str ="https://play.google.com/store/apps/details?id=example";
                  startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(str)));
  
              }
  
         ;{ 
  
         }});
  
  
  
  
          NotificationCompat.Builder mBuilder =
                  new NotificationCompat.Builder(this)
                  .setSmallIcon(R.drawable.ic_launcher)
                  .setContentTitle("example")
                  .setContentText("example.");
          // Creates an explicit intent for an Activity in your app
          final Intent notificationIntent = new Intent(this, MainActivity.class);
          notificationIntent.setAction(Intent.ACTION_MAIN);
          notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER);
          mBuilder.setOngoing(true);
          // The stack builder object will contain an artificial back stack for the
          // started Activity.
          // This ensures that navigating backward from the Activity leads out of
          // your application to the Home screen.
  
          // Adds the back stack for the Intent (but not the Intent itself)
          PendingIntent resultPendingIntent = PendingIntent.getActivity(this,0,notificationIntent,PendingIntent.FLAG_UPDATE_CURRENT);
  
          mBuilder.setContentIntent(resultPendingIntent);
          NotificationManager mNotificationManager =
              (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
          int mId = 0;
          // mId allows you to update the notification later on.
          mNotificationManager.notify(mId, mBuilder.build());
      }
  
      public void onClick(View v) {
          int resId;
          switch (v.getId()) {
          case R.id.button_1:
              resId = R.raw.birdsong;
              break;
          case R.id.button_2:
              resId = R.raw.electrifying_thunderstorms;
              break;
          case R.id.button_3:
              resId = R.raw.fan;
              break;
          case R.id.button_4:
              resId = R.raw.jungle_river;
              break;
          case R.id.button_5:
              resId = R.raw.pig_frogs;
              break;
          case R.id.button_6:
              resId = R.raw.predawn;
              break;
          case R.id.button_7:
              resId = R.raw.shower;
              break;
          case R.id.button_8:
              resId = R.raw.twilight;
              break;
          default:
              resId = R.raw.birdsong;
              break;
          }
          // Release any resources from previous MediaPlayer
          if (mp != null) {
              mp.release();
          }
          // Create a new MediaPlayer to play this sound
          mp = MediaPlayer.create(this, resId);
          mp.setLooping(true);
          mp.start();
  
          ImageView button_stop=(ImageView)findViewById(R.id.button_stop);
          button_stop.setImageResource(R.drawable.ic_action_volume_on);
  
      }{
  
  
                          }
      @Override
      protected void onDestroy() {
          if(null!=mp){
              mp.release();
          }
          super.onDestroy();
      }
  
      }
  </code></pre>
  
  <p><strong>LOGCAT</strong></p>
  
  <pre><code>02-27 12:55:12.306: W/dalvikvm(887): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
  02-27 12:55:12.326: E/AndroidRuntime(887): FATAL EXCEPTION: main
  02-27 12:55:12.326: E/AndroidRuntime(887): java.lang.NullPointerException
  02-27 12:55:12.326: E/AndroidRuntime(887):  at me.soundasleep.app.MainActivity$1.onCallStateChanged(MainActivity.java:36)
  02-27 12:55:12.326: E/AndroidRuntime(887):  at android.telephony.PhoneStateListener$2.handleMessage(PhoneStateListener.java:369)
  02-27 12:55:12.326: E/AndroidRuntime(887):  at android.os.Handler.dispatchMessage(Handler.java:99)
  02-27 12:55:12.326: E/AndroidRuntime(887):  at android.os.Looper.loop(Looper.java:137)
  02-27 12:55:12.326: E/AndroidRuntime(887):  at android.app.ActivityThread.main(ActivityThread.java:5041)
  02-27 12:55:12.326: E/AndroidRuntime(887):  at java.lang.reflect.Method.invokeNative(Native Method)
  02-27 12:55:12.326: E/AndroidRuntime(887):  at java.lang.reflect.Method.invoke(Method.java:511)
  02-27 12:55:12.326: E/AndroidRuntime(887):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
  02-27 12:55:12.326: E/AndroidRuntime(887):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
  02-27 12:55:12.326: E/AndroidRuntime(887):  at dalvik.system.NativeStart.main(Native Method)
  02-27 12:55:12.358: W/ActivityManager(292):   Force finishing activity me.soundasleep.app/.MainActivity
  02-27 12:55:12.366: W/WindowManager(292): Failure taking screenshot for (328x583) to layer 21010
  02-27 12:55:12.656: E/SurfaceFlinger(37): ro.sf.lcd_density must be defined as a build property
  02-27 12:55:12.886: W/ActivityManager(292): Activity pause timeout for ActivityRecord{4132e3e0 u0 me.soundasleep.app/.MainActivity}
  02-27 12:55:13.149: E/SurfaceFlinger(37): ro.sf.lcd_density must be defined as a build property
  02-27 12:55:16.186: I/Process(887): Sending signal. PID: 887 SIG: 9
  02-27 12:55:16.206: I/ActivityManager(292): Process EXAMPLE (pid 887) has died.
  </code></pre>