Android 当我按下“onActivityResult”时出错;取消“;我的第二个活动按钮

Android 当我按下“onActivityResult”时出错;取消“;我的第二个活动按钮,android,onactivityresult,cancel-button,Android,Onactivityresult,Cancel Button,我有以下活动: 活动1 //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.th

我有以下活动:


活动1

//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
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
        }
    }
}
活动2

在第二个活动中,我有两个按钮:

  • 取消
  • 拯救
  • //

    //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();
    }
    
    问题

    当我单击“保存”按钮时,所有操作都很完美,但问题是当我单击“取消”按钮时,它会报告一个错误:

    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
    
    我理解问题所在,当我取消时,结果代码不相同,但我不知道如何解决它


    有什么建议吗?

    您在
    onActivityResult
    方法中遇到了问题。你不检查结果

    将您的状况从:

    if (requestCode == SAVE_DATA_FROM_activity)
    
    致:

    改变这个

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

    您的取消方法如下

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

    使用Android的默认OK,而不是OK\u RESULT\u CODE活动一样。RESULT\u OK

    检查是否设置了结果

    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
        }
    }
    

    在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");
            }
        }
    

    活动1

    //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
    
    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
            }
        }
    }
    
    活动2

    删除字段确定\u结果\u代码

    //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();
    }
    

    确保您的“确定结果”代码是公开的