title: Android is skipping startActivityForResult, throwing Exception
body: <p>I've ran into an infuriating issue with my Android development- whenever I call <code>startActivityForResult(this, Notepadv3.class);</code>, my app skipps directly over it, not launching the new activity nor returning any result from it. It's as if the code wasn't there! </p>
  
  <p>When I change <code>this</code> to <code>mContext</code> (I have defined <code>mContext</code> as <code>Context mContext;</code> in the beginning of the class), the app crashes with a <code>NullPointerException</code>.</p>
  
  <p>I have used the exact same code layout in a different class, and it runs flawlessly.
  I've verified that I'm properly declaring the activities in the Manifest.</p>
  
  <p>I've spent hours searching stackoverflow for answers, as well as looking up countless examples of how to do this particular activity, to no avail. I'm in the process of learning how to write Android apps, and as such have used Google's Notepad tutorial to base my app on. Thanks for the much appreciated assistance in advance!</p>
  
  <p>Code and stack trace is as follows:</p>
  
  <p>NoteEdit.java: (I've skimmed some irrelevant code for readability's sake)
  <code></p>
  
  <pre><code>public class NoteEdit extends Activity implements OnClickListener {
  
  
  Context mContext;
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      mDbHelper = new NotesDbAdapter(this);
      mDbHelper.open();
  
      setContentView(R.layout.note_edit);
      setTitle(R.string.edit_item);
  
      }
  
  @Override
  public void onActivityResult(int requestCode, int resultCode, Intent intent) {
      if (requestCode == REQUEST_BARCODE) {
          if (resultCode == RESULT_OK) {
              barcode = (intent.getStringExtra("SCAN_RESULT"));
              new updateBarcodeField().execute("");
          } else if (resultCode == RESULT_CANCELED) {
          }
      }else if (requestCode == REQUEST_NEW) {
          System.out.println("REQUEST_NEW onActivityResult().");
      }
  }
  
  
  @Override
  protected void onSaveInstanceState(Bundle outState) {
      super.onSaveInstanceState(outState);
      saveState();
      outState.putSerializable(NotesDbAdapter.KEY_ROWID, mRowId);
  }
  
  
  @Override
  protected void onPause() {
      super.onPause();
      saveState();
  }
  
  private void saveState(){
      System.out.println("saveState()");
      doorCall();
      mDbHelper.open();
      String title = mTitleText.getText().toString();
      String barcode = mBarcodeText.getText().toString();
      String price = mPriceText.getText().toString();
      Intent requestNew = new Intent(mContext, Notepadv3.class);
  
      if (returnCode == 1){
          System.out.println("returnCode is 1. Calling validateFields()...");
          String errors = validateFields(title);
          if (errors.length() &gt; 0) {
              Toast.makeText(this, "Oops! Need a title!", duration).show();
              System.out.println("Calling Notepadv3...");
              startActivityForResult(requestNew, REQUEST_NEW);
          }
      }
  
      if (returnCode == 2){
          System.out.println("returnCode == 2 - Cancelling activity");
  
      }else{
          if (title.matches("")){
              System.out.println("Variable is null. Returning...");
              doorCall();
              mDbHelper.close();
              return;
          }else{
              System.out.println("Checking mRowId for null");
              if (mRowId == null) {
  
                  Toast.makeText(this, "Success, product saved successfully", duration).show();
                  System.out.println("Switching activity to 'NotesDbAdapter'");
                  long id = mDbHelper.createNote(title, barcode, price);
                  mRowId = id;
              }else{
                  System.out.println("mRowId is not null. Calling updateNote");
                  mDbHelper.updateNote(mRowId, title, barcode, price);
              }
          }
      }
      System.out.println("saveState() Finished");
      if (doorCall()==true){
          System.out.println("Database is Open");
      }else{
          System.out.println("Database is Closed");
      }
  }
  
  }
  </code></pre>
  
  <p>Notepadv3.java:</p>
  
  <pre><code>public class Notepadv3 extends ListActivity implements OnClickListener {
  
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.notes_list);
      mDbHelper = new NotesDbAdapter(this);
      mDbHelper.open();
  
      mAddButton = (Button) findViewById(R.id.addButton);
      mAddButton.setOnClickListener(this);
      mScanButton = (Button) findViewById(R.id.scanButtonList);
      mScanButton.setOnClickListener(this);
  
      fillData();
      registerForContextMenu(getListView());
  }
  
  @SuppressWarnings("deprecation")
  private void fillData() {
      Cursor notesCursor = mDbHelper.fetchAllNotes();
      startManagingCursor(notesCursor);
  
      // Create an array to specify the fields we want to display in the list (only TITLE)
      String[] from = new String[]{NotesDbAdapter.KEY_TITLE, NotesDbAdapter.KEY_PRICE};
  
      // and an array of the fields we want to bind those fields to (in this case just text1)
      int[] to = new int[]{R.id.text1, R.id.text2};
  
      // Now create a simple cursor adapter and set it to display
      SimpleCursorAdapter notes = 
              new SimpleCursorAdapter(this, R.layout.notes_row, notesCursor, from, to);
      setListAdapter(notes);        
  }
  
  public void onClick(View v) {
      switch (v.getId()) {
      case R.id.addButton:
          createNote();
          break;
  
      case R.id.scanButtonList:
          Intent intent = new Intent("com.google.zxing.client.android.SCAN");
          intent.putExtra("SCAN_MODE", "ONE_D_MODE");
          startActivityForResult(intent, REQUEST_BARCODE);        
  
      }
  }
  @Override
  public void onCreateContextMenu(ContextMenu menu, View v,
          ContextMenuInfo menuInfo) {
      super.onCreateContextMenu(menu, v, menuInfo);
      menu.add(0, DELETE_ID, 0, R.string.menu_delete);
  }
  
  @Override
  public boolean onContextItemSelected(MenuItem item) {
      switch(item.getItemId()) {
      case DELETE_ID:
          AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
          mDbHelper.deleteNote(info.id);
          fillData();
          return true;
      }
      return super.onContextItemSelected(item);
  }
  
  public void createNote() {
      Intent i = new Intent(this, NoteEdit.class);
      startActivityForResult(i, ACTIVITY_CREATE);
  }
  
  private void viewNote() {
      System.out.println("viewNote(). Starting NoteEdit...");
      Intent i = new Intent(this, NoteView.class);
      i.putExtra(NotesDbAdapter.KEY_BARCODE, barcode);
      startActivityForResult(i, ACTIVITY_EDIT);
  }
  
  @Override
  public void onListItemClick(ListView l, View v, int position, long id) {
      super.onListItemClick(l, v, position, id);
      Intent i = new Intent(this, NoteEdit.class);
      i.putExtra(NotesDbAdapter.KEY_ROWID, id);
      startActivityForResult(i, ACTIVITY_EDIT);
  }
  
  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
      super.onActivityResult(requestCode, resultCode, intent);
      System.out.println("Notepadv3. requestCode is " + requestCode + ", and resultCode is " + resultCode);
      if (requestCode == REQUEST_BARCODE) {
          if (resultCode == RESULT_OK) {
              barcode = (intent.getStringExtra("SCAN_RESULT"));
              System.out.println("Calling viewNote()...");
              viewNote();
          } else if (resultCode == RESULT_CANCELED) {
          } else if (resultCode == RESULT_FIRST_USER) {
          }
      }else if (requestCode == REQUEST_NEW){
          System.out.println("Notepadv3. requestCode is REQUEST_NEW. Calling createNote()...");
          createNote();
      }
      super.onActivityResult(requestCode, resultCode, intent);
      fillData();
  }
  }
  </code></pre>
  
  <p>Stack trace:</p>
  
  <pre>FATAL EXCEPTION: main
  java.lang.RuntimeException: Unable to pause activity {com.android.demo.notepad3/com.android.demo.notepad3.NoteEdit}: java.lang.NullPointerException
  at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2706)
  at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2662)
  at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:2640)
  at android.app.ActivityThread.access$800(ActivityThread.java:123)
  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158)
  at android.os.Handler.dispatchMessage(Handler.java:99)
  at android.os.Looper.loop(Looper.java:137)
  at android.app.ActivityThread.main(ActivityThread.java:4424)
  at java.lang.reflect.Method.invokeNative(Native Method)
  at java.lang.reflect.Method.invoke(Method.java:511)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
  at dalvik.system.NativeStart.main(Native Method)
  Caused by: java.lang.NullPointerException
  at android.content.ComponentName.&lt;init&gt;(ComponentName.java:75)
  at android.content.Intent.&lt;init&gt;(Intent.java:3148)
  at com.android.demo.notepad3.NoteEdit.saveState(NoteEdit.java:206)
  at com.android.demo.notepad3.NoteEdit.onPause(NoteEdit.java:187)
  at android.app.Activity.performPause(Activity.java:4590)
  at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1195)
  at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2693)
  </code></pre>