Class variables set in onActivityResult are reset when method returns

android

Solution

It's Possible that your `Activity` is being Suspended and Re-created.

Essentially, if the Intent you're launching with `startActivityForResult` is resource-intensive enough, the OS might have to suspend your Activity to free up resources.

So it saves what it can and then returning from the Intent to call `onActivityResult`, it has to re-create your Activity. Any instance variables will be reset in this case.

You get around this by either restarting the device or handling it with `onSaveInstanceState` and `onRestoreInstanceState`.

Read more here: Why oncreate method called after startActivityForResult?

Problem

I have an activity which lets the user select a phone number. Naturally, I'd like my class to remember the id of the contact selected, so I save this in a class field. However when the method onActivityResult returns, my class variable is reset. Here is what I'm trying to do: ``` Intent intent = new Intent(Intent.ACTION_PICK, People.CONTENT_URI); startActivityForResult(intent, PICK_CONTACT); ... public void onActivityResult(int reqCode, int resultCode, Intent intent){ super.onActivityResult(reqCode, resultCode, intent); switch(reqCode){ case(PICK_CONTACT): if(resultCode == Activity.RESULT_OK){ Uri contactData = intent.getData(); Cursor c = managedQuery(contactData, null, null, null, null); if(c.moveToFirst()){ contactName = c.getString(c.getColumnIndexOrThrow(People.NAME)); contactId = c.getInt(c.getColumnIndexOrThrow(People._ID)); break; ``` When I set a breakpoint within this method, the values for contactName and contactId are as I expect, however once the method returns, the values somehow get reset to their defaults. Clearly I'm missing something, but I'm not sure what I'm doing wrong or forgetting. Thanks! Iva

Original source

Related problems