Note that there are some explanatory texts on larger screens.

plurals
  1. POAndroid is skipping startActivityForResult, throwing Exception
    text
    copied!<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>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload