0

I have the next activities:

Activity1

//declare
private static final int SAVE_DATA_FROM_ACTIVITY = 203;

//........... not important code

//button to open second Activity
public void btn_openSecondActivity(View view)
    {

            Intent intent = new Intent(Activity2.this, Activity1.class);

            startActivityForResult(intent, SAVE_DATA_FROM_ACTIVITY);
        }
    }


 protected void onActivityResult (int requestCode, int resultCode, Intent data)
    {
      if (requestCode == SAVE_DATA_FROM_activity)
        {
            name= data.getStringExtra("Name");
        }
    }


//....... not important code

Activity2

On Second Activity I have two buttons:

  1. Cancel
  2. Save

//............

//declare
private static final int OK_RESULT_CODE = 1;

//Cancel button
public void btn_cancel(View view)
{
    finish();
}

//Save button
public void btn_save (View view)
{

    Intent intent = new Intent();
    intent.putExtra("Name",et_name.getText().toString());

    setResult(OK_RESULT_CODE, intent);

    finish();
}

PROBLEM

When I click Save button all works perfect, but the problem it's when I click Cancel button, then it's reports an error:

Failure delivering result ResultInfo{who=null, request=203, result=0, data=null} to activity {com.example.alvaro.project/com.alvaro.project.Activity1}: java.lang.NullPointerException

I understand the problem, when I cancel is not the same result code but i don't know how I can solve it

Any suggestions?

Aspicas
  • 4,498
  • 4
  • 30
  • 53

5 Answers5

1

You have issue in onActivityResult method. You don't check result.

Change your condition from :

if (requestCode == SAVE_DATA_FROM_activity)

to:

if (resultCode  == OK_RESULT_CODE  && requestCode == SAVE_DATA_FROM_activity)
Konrad Krakowiak
  • 12,285
  • 11
  • 58
  • 45
1

Change this

if (requestCode == SAVE_DATA_FROM_activity)
    {
        name= data.getStringExtra("Name");
    }

into

   if (requestCode == SAVE_DATA_FROM_activity&&resultCode==RESULT_OK)
    {
        name= data.getStringExtra("Name");
    }

and

Your cancel method is like

public void btn_cancel(View view)
{
   setResult(RESULT_CANCELED);
    finish();
}

And instead of OK_RESULT_CODE use Android default ok like Activity.RESULT_OK

kalyan pvs
  • 14,486
  • 4
  • 41
  • 59
0

Check if you manage to set the result

protected void onActivityResult (int requestCode, int resultCode, Intent data)
{
  if (requestCode == SAVE_DATA_FROM_activity && resultCode = Activity2.OK_RESULT_CODE)
    {
        name= data.getStringExtra("Name");
    } else {
       //probably btn_cancel pressed
    }
}
Karol Żygłowicz
  • 2,442
  • 2
  • 26
  • 35
0

check resultCode in onActivityResult

 protected void onActivityResult (int requestCode, int resultCode, Intent data)
    {
      if (resultCode == 1/*OK_RESULT_CODE from Second Activity */ && requestCode == SAVE_DATA_FROM_activity)
        {
            name= data.getStringExtra("Name");
        }
    }
const
  • 26
  • 3
0

Activity1

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == SAVE_DATA_FROM_activity) {
        if (resultCode == Activity.RESULT_OK) {
            name = data.getStringExtra("Name");
        } else if (resultCode == Activity.RESULT_CANCELED){
            // TODO something
        }
    }
}

Activity2

delete field OK_RESULT_CODE

//Cancel button
public void btn_cancel(View view) {
    setResult(Activity.RESULT_CANCELED, new Intent());
    finish();
}

//Save button
public void btn_save(View view) {
    Intent intent = new Intent();
    intent.putExtra("Name", et_name.getText().toString());
    setResult(Activity.RESULT_OK, intent);

    finish();
}
Kiryl Bielašeŭski
  • 2,663
  • 2
  • 28
  • 40