Android – onActivityResult() Intent data is always null
by Riley MacDonald, August 25, 2017

Problem
When trying to pass data from a child Activity to a parent Activity I ran into an issue where the Intent data in onActivityResult() was always null. Here’s the code I was using to pass the data from one Activity to another.

Main Activity
Here I was attempting to receive data from SecondActivity when it finished.

public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        startActivityForResult(new Intent(this, SecondActivity.class), 15);
    }
 
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    }
}

Second Activity
Here I was attempting to send some data back to the other Activity. I verified that onPause() was invoked before onActivityResult() in MainActivity so the data should be sent fine. Unfortunately Intent is null in MainActivity using this technique.

public class SecondActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
    }
 
    @Override
    protected void onPause() {
        setResult(RESULT_OK, new Intent().putExtra("test", "test"));
        super.onPause();
    }
}

Solution
This fix might not be appropriate for everyone. I worked around this issue by overriding onBackPressed() and invoking my setResult() in that method. I think the call to super.onBackPressed() was destroying the intent somehow. Here’s an example of the solution:

public class SecondActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
    }
 
    @Override
    public void onBackPressed() {
        setResult(RESULT_OK, new Intent().putExtra("test", "test"));
        super.onBackPressed();
    }
}

Now I receive the expected Intent in MainActivity.

Open the comment form

Leave a comment:

Comments will be reviewed before they are posted.

User Comments:

Be the first to leave a comment on this post!